[hackers] [sbase] Audit printenv(1) || FRIGN
commit 0226c051056e873d7faa46434b1b012eac59af12 Author: FRIGN d...@frign.de Date: Sat Feb 28 21:47:17 2015 +0100 Audit printenv(1) 1) argc style 2) safeguard argv-loop as already seen in echo(1) with argc-decrement. diff --git a/README b/README index 4a2d7a2..7bccbf6 100644 --- a/README +++ b/README @@ -51,7 +51,7 @@ The following tools are implemented ('*' == finished, '#' == UTF-8 support, = nl no -d, -f, -h, -l, -p =* nohup yes none #* paste yes none -=* printenvnon-posixnone +=*| printenvnon-posixnone #* printf yes none =* pwd yes none = readlinknon-posixnone diff --git a/echo.c b/echo.c index 2ae8af9..8b58bcc 100644 --- a/echo.c +++ b/echo.c @@ -23,7 +23,7 @@ main(int argc, char *argv[]) } ARGEND; for (; argc 0; argc--, argv++) - putword(argv[0]); + putword(*argv); if (!nflag) putchar('\n'); diff --git a/printenv.c b/printenv.c index 675a6f9..ff210cb 100644 --- a/printenv.c +++ b/printenv.c @@ -9,7 +9,7 @@ extern char **environ; static void usage(void) { - eprintf(usage: %s [variable...]\n, argv0); + eprintf(usage: %s [var ...]\n, argv0); } int @@ -23,16 +23,17 @@ main(int argc, char *argv[]) usage(); } ARGEND; - if (argc == 0) { + if (!argc) { while (*environ) printf(%s\n, *environ++); } else { - while (*argv) { - if ((var = getenv(*argv++))) + for (; argc 0; argc--, argv++) { + if ((var = getenv(*argv))) printf(%s\n, var); else ret = 1; } } + return ret; }
Re: [hackers] [sbase] Audit printenv(1) || FRIGN
On Sun, 1 Mar 2015 08:01:18 +0100 Roberto E. Vargas Caballero k...@shike2.com wrote: In this case I agree with Evan, and I see the argv loop idiomatic. I have seen in several books and in diferent sources. I usually do the argv loop: for (++argv; *argv; ++argc) or while (*++argv) and if I need do a test argc something then I update the value of argc in the body. If I only need argc 0 I use *argv != 0. Check out this new commit, I reflected your ideas. Checking argv is more consistent across sbase: http://git.2f30.org/sbase/commit/?id=286df29e7d78ae4a6b4474bb14d517e02e4f0489 Cheers FRIGN -- FRIGN d...@frign.de
[hackers] [sbase] Audit printenv(1) || FRIGN
commit 05198cfd27d927704b14f02dba17376c9e9c4268 Author: FRIGN d...@frign.de Date: Sat Feb 28 21:47:17 2015 +0100 Audit printenv(1) 1) argc style 2) safeguard argv-loop as already seen in echo(1) with argc-decrement. diff --git a/README b/README index 4a2d7a2..7bccbf6 100644 --- a/README +++ b/README @@ -51,7 +51,7 @@ The following tools are implemented ('*' == finished, '#' == UTF-8 support, = nl no -d, -f, -h, -l, -p =* nohup yes none #* paste yes none -=* printenvnon-posixnone +=*| printenvnon-posixnone #* printf yes none =* pwd yes none = readlinknon-posixnone diff --git a/echo.c b/echo.c index 2ae8af9..8b58bcc 100644 --- a/echo.c +++ b/echo.c @@ -23,7 +23,7 @@ main(int argc, char *argv[]) } ARGEND; for (; argc 0; argc--, argv++) - putword(argv[0]); + putword(*argv); if (!nflag) putchar('\n'); diff --git a/printenv.c b/printenv.c index 675a6f9..ff210cb 100644 --- a/printenv.c +++ b/printenv.c @@ -9,7 +9,7 @@ extern char **environ; static void usage(void) { - eprintf(usage: %s [variable...]\n, argv0); + eprintf(usage: %s [var ...]\n, argv0); } int @@ -23,16 +23,17 @@ main(int argc, char *argv[]) usage(); } ARGEND; - if (argc == 0) { + if (!argc) { while (*environ) printf(%s\n, *environ++); } else { - while (*argv) { - if ((var = getenv(*argv++))) + for (; argc 0; argc--, argv++) { + if ((var = getenv(*argv))) printf(%s\n, var); else ret = 1; } } + return ret; }
Re: [hackers] [sbase] Audit printenv(1) || FRIGN
2) safeguard argv-loop as already seen in echo(1) with argc-decrement. The arg loops can simply be for (; *argv; argv++) as the standard guarantees argv[argc] is NULL. -emg
Re: [hackers] [sbase] Audit printenv(1) || FRIGN
On Sat, 28 Feb 2015 13:25:09 -0800 Evan Gates evan.ga...@gmail.com wrote: The arg loops can simply be for (; *argv; argv++) as the standard guarantees argv[argc] is NULL. Hey Evan, I discussed this with stateless and we came to the conclusion that the argc-approach is more idiomatic. In this case I agree with Evan, and I see the argv loop idiomatic. I have seen in several books and in diferent sources. I usually do the argv loop: for (++argv; *argv; ++argc) or while (*++argv) and if I need do a test argc something then I update the value of argc in the body. If I only need argc 0 I use *argv != 0. Regards,