Make an alias for `cksum' called `sum', which defaults to the
authorKeith Bostic <bostic@ucbvax.Berkeley.EDU>
Sat, 29 Apr 1995 07:57:08 +0000 (23:57 -0800)
committerKeith Bostic <bostic@ucbvax.Berkeley.EDU>
Sat, 29 Apr 1995 07:57:08 +0000 (23:57 -0800)
historical BSD algorithm.
Use err*(3)/warn*(3) (which becomes important for the alias).
From: Charles Hannum <mycroft@NetBSD.ORG>

SCCS-vsn: usr.bin/cksum/cksum.c 8.2

usr/src/usr.bin/cksum/cksum.c

index f753700..f1ba64c 100644 (file)
@@ -15,17 +15,20 @@ static char copyright[] =
 #endif /* not lint */
 
 #ifndef lint
 #endif /* not lint */
 
 #ifndef lint
-static char sccsid[] = "@(#)cksum.c    8.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)cksum.c    8.2 (Berkeley) %G%";
 #endif /* not lint */
 
 #include <sys/cdefs.h>
 #include <sys/types.h>
 #endif /* not lint */
 
 #include <sys/cdefs.h>
 #include <sys/types.h>
+
+#include <err.h>
+#include <errno.h>
 #include <fcntl.h>
 #include <fcntl.h>
-#include <unistd.h>
 #include <stdio.h>
 #include <stdio.h>
-#include <errno.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
+
 #include "extern.h"
 
 void usage __P((void));
 #include "extern.h"
 
 void usage __P((void));
@@ -35,27 +38,35 @@ main(argc, argv)
        int argc;
        char **argv;
 {
        int argc;
        char **argv;
 {
-       extern int optind;
-       u_long len, val;
        register int ch, fd, rval;
        register int ch, fd, rval;
-       char *fn;
+       u_long len, val;
+       char *fn, *p;
        int (*cfncn) __P((int, unsigned long *, unsigned long *));
        void (*pfncn) __P((char *, unsigned long, unsigned long));
 
        int (*cfncn) __P((int, unsigned long *, unsigned long *));
        void (*pfncn) __P((char *, unsigned long, unsigned long));
 
-       cfncn = crc;
-       pfncn = pcrc;
-       while ((ch = getopt(argc, argv, "o:")) != EOF)
-               switch(ch) {
+       if ((p = rindex(argv[0], '/')) == NULL)
+               p = argv[0];
+       else
+               ++p;
+       if (*p == 'c') {
+               cfncn = crc;
+               pfncn = pcrc;
+       } else {
+               cfncn = csum1;
+               pfncn = psum1;
+       }
+
+       while ((ch = getopt(argc, argv, "o:")) != -1)
+               switch (ch) {
                case 'o':
                case 'o':
-                       if (*optarg == '1') {
+                       if (!strcmp(optarg, "1")) {
                                cfncn = csum1;
                                pfncn = psum1;
                                cfncn = csum1;
                                pfncn = psum1;
-                       } else if (*optarg == '2') {
+                       } else if (!strcmp(optarg, "2")) {
                                cfncn = csum2;
                                pfncn = psum2;
                        } else {
                                cfncn = csum2;
                                pfncn = psum2;
                        } else {
-                               (void)fprintf(stderr,
-                                   "cksum: illegal argument to -o option\n");
+                               warnx("illegal argument to -o option");
                                usage();
                        }
                        break;
                                usage();
                        }
                        break;
@@ -73,15 +84,13 @@ main(argc, argv)
                if (*argv) {
                        fn = *argv++;
                        if ((fd = open(fn, O_RDONLY, 0)) < 0) {
                if (*argv) {
                        fn = *argv++;
                        if ((fd = open(fn, O_RDONLY, 0)) < 0) {
-                               (void)fprintf(stderr, "cksum: %s: %s\n",
-                                   fn, strerror(errno));
+                               warn("%s", fn);
                                rval = 1;
                                continue;
                        }
                }
                if (cfncn(fd, &val, &len)) {
                                rval = 1;
                                continue;
                        }
                }
                if (cfncn(fd, &val, &len)) {
-                       (void)fprintf(stderr, "cksum: %s: %s\n",
-                           fn ? fn : "stdin", strerror(errno));
+                       warn("%s", fn ? fn : "stdin");
                        rval = 1;
                } else
                        pfncn(fn, val, len);
                        rval = 1;
                } else
                        pfncn(fn, val, len);