commit 3293c154dabbe69f008fdcae348742eb71780fd2
parent e87900056a659f93fc1b7e938dde0a4f842d537b
Auteur: Selve <selve@asteride.xyz>
Date: Thu, 7 Dec 2023 21:49:17 -0500
changement de nom pour envic
Diffstat:
M | Makefile | | | 14 | +++++++------- |
A | envic.c | | | 95 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
D | iusc.c | | | 95 | ------------------------------------------------------------------------------- |
3 files changed, 102 insertions(+), 102 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: iusc
+all: envic
-iusc: iusc.c
- ${CC} ${COPT} -o "$@" iusc.c
+envic: envic.c
+ ${CC} ${COPT} -o "$@" envic.c
-install: iusc
- install -m 755 iusc ${PREFIX}/iusc
+install: envic
+ install -m 755 envic ${PREFIX}/envic
uninstall:
- rm -f ${PREFIX}/iusc
+ rm -f ${PREFIX}/envic
clean:
- rm -f iusc *.core
+ rm -f envic *.core
diff --git a/envic.c b/envic.c
@@ -0,0 +1,95 @@
+/*
+ * 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;
+ char *var;
+
+ if (argc < 2) {
+ utilisation();
+ return 1;
+ }
+
+ /* argv[0] contient le nom du programme que sh exécutera, et argv[1]
+ * contient temporairement le chemin absolu vers ce programme. Une fois
+ * que ce chemini aura été assigné à la variable d'environnement ENV, il
+ * servira à contenir l'argument -s. */
+ argv[0] = argv[1];
+
+ /* POSIX stipule que le chemin contenu dans la variable ENV doit être
+ * absolu. Ce chemin est formé par la concaténation du dossier courant
+ * et du fichier donné en premier argument, séparés par une barre
+ * oblique (/). */
+ if (*argv[1] != '/') {
+ static char abs[PATH_MAX];
+ size_t lngr;
+
+ 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 rempli le reste du tampon avec des caractères NUL
+ * si 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;
+ }
+
+
+ if ((var = getenv("ENVIC_SHELL")) != NULL ||
+ (var = getenv("SHELL")) != NULL)
+ sh = var;
+ else
+ sh = IC_DEF;
+
+ if ((var = getenv("ENV")) != NULL)
+ setenv("ENVIC_ENV", var, 1);
+ else
+ unsetenv("ENVIC_ENV");
+ setenv("ENV", argv[1], 1);
+
+ argv[1] = "-s";
+
+ execve(sh, argv, environ);
+
+erreur:
+ perror("envic");
+ return 1;
+}
+
+static void
+utilisation(void)
+{
+ fprintf(stderr, "UTILISATION: envic [programme] [arg ...]\n");
+}
diff --git a/iusc.c b/iusc.c
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2023 Selve <selve@asteride.xyz>
- *
- * Ce fichier fait partie de iusc, 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 SHELL_DEF "/bin/sh"
-
-extern char **environ;
-
-static void utilisation(void);
-
-int
-main(int argc, char **argv)
-{
- char *sh;
- char *var;
-
- if (argc < 2) {
- utilisation();
- return 1;
- }
-
- /* argv[0] contient le nom du programme que sh exécutera, et argv[1]
- * contient temporairement le chemin absolu vers ce programme. Une fois
- * que ce chemini aura été assigné à la variable d'environnement ENV, il
- * servira à contenir l'argument -s. */
- argv[0] = argv[1];
-
- /* POSIX stipule que le chemin contenu dans la variable ENV doit être
- * absolu. Ce chemin est formé par la concaténation du dossier courant
- * et du fichier donné en premier argument, séparés par une barre
- * oblique (/). */
- if (*argv[1] != '/') {
- static char abs[PATH_MAX];
- size_t lngr;
-
- 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 rempli le reste du tampon avec des caractères NUL
- * si 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;
- }
-
-
- if ((var = getenv("IUSC_SHELL")) != NULL ||
- (var = getenv("SHELL")) != NULL)
- sh = var;
- else
- sh = SHELL_DEF;
-
- if ((var = getenv("ENV")) != NULL)
- setenv("IUSC_ENV", var, 1);
- else
- unsetenv("IUSC_ENV");
- setenv("ENV", argv[1], 1);
-
- argv[1] = "-s";
-
- execve(sh, argv, environ);
-
-erreur:
- perror("iusc");
- return 1;
-}
-
-static void
-utilisation(void)
-{
- fprintf(stderr, "UTILISATION: iusc [programme] [arg ...]\n");
-}