On 2003-10-12 16:50 +0100, Colin Percival <[EMAIL PROTECTED]> wrote:
>   Or rather, lack thereof.  I was rather astonished to find that `md5 
> /nonexistant` printed an error message but still returned an exit code of 
> zero; this is, of course, due to the use of warn() instead of err() in 
> response to a receiving a NULL pointer returned from MD5File(3).
>   Is there any reason for this behaviour?

Don't think so, and I fixed it many years ago (much earlier 
than the dates in the diff seem to indicate) on my system.

Patch attached ...

Regards, STefan

PS: Guess I should just commit this change to -current ...


Index: md5.1
===================================================================
RCS file: /usr/cvs/src/sbin/md5/md5.1,v
retrieving revision 1.18
diff -u -r1.18 md5.1
--- md5.1       19 Apr 2002 23:05:25 -0000      1.18
+++ md5.1       21 Jun 2002 12:53:47 -0000
@@ -67,6 +67,10 @@
 .It Fl x
 Run a built-in test script.
 .El
+.Sh DIAGNOSTICS
+The
+.Nm
+program exits 0 on success, and 1 if at least one of the input files could not be 
read.
 .Sh SEE ALSO
 .Xr cksum 1
 .Rs
Index: md5.c
===================================================================
RCS file: /usr/cvs/src/sbin/md5/md5.c,v
retrieving revision 1.30
diff -u -r1.30 md5.c
--- md5.c       3 May 2003 18:41:58 -0000       1.30
+++ md5.c       4 May 2003 13:11:55 -0000
@@ -62,7 +62,9 @@
        int     ch;
        char   *p;
        char    buf[33];
+       int     failed;
 
+       failed = 0;
        while ((ch = getopt(argc, argv, "pqrs:tx")) != -1)
                switch (ch) {
                case 'p':
@@ -93,19 +95,24 @@
        if (*argv) {
                do {
                        p = MD5File(*argv, buf);
-                       if (!p)
+                       if (!p) {
                                warn("%s", *argv);
-                       else
+                               failed++;
+                       } else {
                                if (qflag)
                                        printf("%s\n", p);
                                else if (rflag)
                                        printf("%s %s\n", p, *argv);
                                else
                                        printf("MD5 (%s) = %s\n", *argv, p);
+                       }
                } while (*++argv);
        } else if (!sflag && (optind == 1 || qflag || rflag))
                MDFilter(0);
 
+       if (failed != 0)
+               return (1);
+ 
        return (0);
 }
 /*
_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to