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
#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 <stdlib.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>
#include "extern.h"
void usage __P((void));
#include "extern.h"
void usage __P((void));
- extern int optind;
- u_long len, val;
register int ch, fd, rval;
register int ch, fd, rval;
+ 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) {
+ 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");
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));
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);