commit 69b2446d217797a6bdd1f19ae956802db62d3a48
parent f1600032749242f26853a3fb72a1b0253bb784f6
Auteur: Selve <selve@asteride.xyz>
Date: Mon, 11 Dec 2023 18:05:32 -0500
autre changement de nom
Pour bibic, cette fois-ci.
Diffstat:
M | Makefile | | | 14 | +++++++------- |
A | bibic.c | | | 116 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
D | envic.c | | | 116 | ------------------------------------------------------------------------------- |
3 files changed, 123 insertions(+), 123 deletions(-)
diff --git a/Makefile b/Makefile
@@ -2,16 +2,16 @@ COPT = -Wall -Werror -Wextra -Wpedantic --std=c89 -O2
CC = cc
PREFIX = "/usr/local/bin"
-all: envic
+all: bibic
-envic: envic.c
- ${CC} ${COPT} -o "$@" envic.c
+bibic: bibic.c
+ ${CC} ${COPT} -o "$@" bibic.c
-install: envic
- install -m 755 envic ${PREFIX}/envic
+install: bibic
+ install -m 755 bibic ${PREFIX}/bibic
uninstall:
- rm -f ${PREFIX}/envic
+ rm -f ${PREFIX}/bibic
clean:
- rm -f envic *.core
+ rm -f bibic *.core
diff --git a/bibic.c b/bibic.c
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2023 Selve <selve@asteride.xyz>
+ *
+ * Ce fichier fait partie de bibic, publié sous la licence GPLv3 (seulement).
+ * Consultez le fichier LICENCE ou le site <https://www.gnu.org/licenses/>
+ * pour plus de détails.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <errno.h>
+#include <limits.h>
+
+#define IC_DEF "/bin/sh" /* interpréteur de commandes par défaut */
+
+extern char **environ;
+
+static void utilisation(void);
+
+int
+main(int argc, char **argv)
+{
+ char *sh; /* interpéreteur de commande */
+ char *var; /* pointeur vers variable d'environnement */
+ char **args; /* arguments à passer à l'interpréteur */
+
+ if (argc < 2) {
+ utilisation();
+ return 1;
+ }
+
+ /* création des arguments à fournir à l'interpréteur
+ * 0: nom du script
+ * 1: option pour forcer l'interprétation en entrée standard,
+ * sert avant tout à indiquer à l'interpréteur de transférer les
+ * arguments au script
+ * 2: option pour indiquer à l'interpréteur de traiter les arguments qui
+ * suivent comme des arguments et non comme des options. Nécessaire
+ * pour qu'il soit possible de fournir des options aux scripts.
+ * …: arguments à fournir au script */
+ if ((args = malloc(argc + 2)) == NULL)
+ goto erreur;
+ args[0] = argv[1];
+ args[1] = "-si";
+ args[2] = "--";
+ args[argc + 1] = NULL;
+
+ /* copier les arguments */
+ while (argc > 2) {
+ args[argc] = argv[argc-1];
+ argc--;
+ }
+
+ /* POSIX stipule que le chemin contenu dans la variable ENV doit être
+ * absolu. Il faut assembler ce chemin. Ce chemin est formé par la
+ * concaténation du dossier courant, d'une barre oblique (/) et du
+ * fichier dans lequel se trouve le script.
+ * Bien sûr, nul besoin de tout cela si le chemin fourni est déjà un
+ * besoin absolu. */
+ if (**argv != '/') {
+ static char abs[PATH_MAX]; /* chemin absolu */
+ size_t lngr; /* longueur du chemin */
+
+ if (getcwd(abs, PATH_MAX) == NULL)
+ goto erreur;
+ lngr = strlen(abs);
+ /* il faut encore ajouter au moins deux caractères au chemin. */
+ if (lngr + 2 >= PATH_MAX) {
+ errno = ENAMETOOLONG;
+ goto erreur;
+ }
+ abs[lngr++] = '/';
+ strncpy(abs + lngr, argv[1], PATH_MAX - lngr);
+ /* strncpy remplit le reste du tampon avec des caractères NUL.
+ * si donc le dernier caractère n'est pas NUL, c'est que le
+ * chemin est trop long. */
+ if (abs[PATH_MAX - 1] != '\0') {
+ errno = ENAMETOOLONG;
+ goto erreur;
+ }
+
+ argv[1] = abs;
+ }
+
+ /* ENVIC_SHELL a priorité sur SHELL. Si ni l'une ni l'autre n'existe,
+ * l'interpréteur spécifié par le macro IC_DEF est assigné à sh */
+ if ((var = getenv("ENVIC_SHELL")) != NULL ||
+ (var = getenv("SHELL")) != NULL)
+ sh = var;
+ else
+ sh = IC_DEF;
+
+ /* Si la variable ENV existe déjà, on déplace son contenu vers
+ * ENVIC_ENV, sinon, il faut supprimer ENVIC_ENV pour ne pas que les
+ * programmes sourcent un fichier sans raison. */
+ if ((var = getenv("ENV")) != NULL)
+ setenv("ENVIC_ENV", var, 1);
+ else
+ unsetenv("ENVIC_ENV");
+ setenv("ENV", argv[1], 1);
+
+ execve(sh, args, environ);
+
+erreur:
+ perror("bibic");
+ return 1;
+}
+
+static void
+utilisation(void)
+{
+ fprintf(stderr, "UTILISATION: bibic [programme] [arg ...]\n");
+}
diff --git a/envic.c b/envic.c
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 2023 Selve <selve@asteride.xyz>
- *
- * Ce fichier fait partie de envic, publié sous la licence GPLv3 (seulement).
- * Consultez le fichier LICENCE ou le site <https://www.gnu.org/licenses/>
- * pour plus de détails.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <errno.h>
-#include <limits.h>
-
-#define IC_DEF "/bin/sh" /* interpréteur de commandes par défaut */
-
-extern char **environ;
-
-static void utilisation(void);
-
-int
-main(int argc, char **argv)
-{
- char *sh; /* interpéreteur de commande */
- char *var; /* pointeur vers variable d'environnement */
- char **args; /* arguments à passer à l'interpréteur */
-
- if (argc < 2) {
- utilisation();
- return 1;
- }
-
- /* création des arguments à fournir à l'interpréteur
- * 0: nom du script
- * 1: option pour forcer l'interprétation en entrée standard,
- * sert avant tout à indiquer à l'interpréteur de transférer les
- * arguments au script
- * 2: option pour indiquer à l'interpréteur de traiter les arguments qui
- * suivent comme des arguments et non comme des options. Nécessaire
- * pour qu'il soit possible de fournir des options aux scripts.
- * …: arguments à fournir au script */
- if ((args = malloc(argc + 2)) == NULL)
- goto erreur;
- args[0] = argv[1];
- args[1] = "-si";
- args[2] = "--";
- args[argc + 1] = NULL;
-
- /* copier les arguments */
- while (argc > 2) {
- args[argc] = argv[argc-1];
- argc--;
- }
-
- /* POSIX stipule que le chemin contenu dans la variable ENV doit être
- * absolu. Il faut assembler ce chemin. Ce chemin est formé par la
- * concaténation du dossier courant, d'une barre oblique (/) et du
- * fichier dans lequel se trouve le script.
- * Bien sûr, nul besoin de tout cela si le chemin fourni est déjà un
- * besoin absolu. */
- if (**argv != '/') {
- static char abs[PATH_MAX]; /* chemin absolu */
- size_t lngr; /* longueur du chemin */
-
- if (getcwd(abs, PATH_MAX) == NULL)
- goto erreur;
- lngr = strlen(abs);
- /* il faut encore ajouter au moins deux caractères au chemin. */
- if (lngr + 2 >= PATH_MAX) {
- errno = ENAMETOOLONG;
- goto erreur;
- }
- abs[lngr++] = '/';
- strncpy(abs + lngr, argv[1], PATH_MAX - lngr);
- /* strncpy remplit le reste du tampon avec des caractères NUL.
- * si donc le dernier caractère n'est pas NUL, c'est que le
- * chemin est trop long. */
- if (abs[PATH_MAX - 1] != '\0') {
- errno = ENAMETOOLONG;
- goto erreur;
- }
-
- argv[1] = abs;
- }
-
- /* ENVIC_SHELL a priorité sur SHELL. Si ni l'une ni l'autre n'existe,
- * l'interpréteur spécifié par le macro IC_DEF est assigné à sh */
- if ((var = getenv("ENVIC_SHELL")) != NULL ||
- (var = getenv("SHELL")) != NULL)
- sh = var;
- else
- sh = IC_DEF;
-
- /* Si la variable ENV existe déjà, on déplace son contenu vers
- * ENVIC_ENV, sinon, il faut supprimer ENVIC_ENV pour ne pas que les
- * programmes sourcent un fichier sans raison. */
- if ((var = getenv("ENV")) != NULL)
- setenv("ENVIC_ENV", var, 1);
- else
- unsetenv("ENVIC_ENV");
- setenv("ENV", argv[1], 1);
-
- execve(sh, args, environ);
-
-erreur:
- perror("envic");
- return 1;
-}
-
-static void
-utilisation(void)
-{
- fprintf(stderr, "UTILISATION: envic [programme] [arg ...]\n");
-}