bibic

bibliothèques pour l'interpréteur de commande
git clone git://git.asteride.xyz/~ldp/bibic.git
Journaux | Fichiers | Références | LICENCE

commit e87900056a659f93fc1b7e938dde0a4f842d537b
parent cf4085a0cd788bf3718350421c19c50e45d7ff00
Auteur: Selve <selve@asteride.xyz>
Date:   Sun,  3 Dec 2023 19:32:58 -0500

transfère des arguments

iusc transfère maintenant les arguments à partir d'argv[2] au shell.

Diffstat:
Miusc.c | 25++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/iusc.c b/iusc.c @@ -24,23 +24,24 @@ int main(int argc, char **argv) { char *sh; - char *args[2]; char *var; - if (argc != 2) { + if (argc < 2) { utilisation(); return 1; } - /* arguments de sh */ - args[0] = argv[1]; - args[1] = NULL; + /* 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 (*args[0] != '/') { + if (*argv[1] != '/') { static char abs[PATH_MAX]; size_t lngr; @@ -52,9 +53,8 @@ main(int argc, char **argv) errno = ENAMETOOLONG; goto erreur; } - printf("test: %lu\n", strlen(abs)); abs[lngr++] = '/'; - strncpy(abs + lngr, args[0], PATH_MAX - 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 */ @@ -63,9 +63,10 @@ main(int argc, char **argv) goto erreur; } - args[0] = abs; + argv[1] = abs; } + if ((var = getenv("IUSC_SHELL")) != NULL || (var = getenv("SHELL")) != NULL) sh = var; @@ -78,7 +79,9 @@ main(int argc, char **argv) unsetenv("IUSC_ENV"); setenv("ENV", argv[1], 1); - execve(sh, args, environ); + argv[1] = "-s"; + + execve(sh, argv, environ); erreur: perror("iusc"); @@ -88,5 +91,5 @@ erreur: static void utilisation(void) { - fprintf(stderr, "UTILISATION: iusc [programme]\n"); + fprintf(stderr, "UTILISATION: iusc [programme] [arg ...]\n"); }