[hackers] [sbase] Audit printenv(1) || FRIGN

2015-03-24 Thread git
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

2015-03-02 Thread 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

2015-02-28 Thread git
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

2015-02-28 Thread Evan Gates
 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

2015-02-28 Thread Roberto E. Vargas Caballero
 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,