|
|
1.1 root 1:
2:
3: /*
4: * sum -- generate checksum
5: */
6: #include <errno.h>
7: #include <stdio.h>
8:
9:
10: #define BUFSZ (20*512)
11:
12:
13: int err;
14: char *filename; /* used by error( ) */
15: extern errno;
16:
17:
18: main( argc, argv)
19: register char **argv;
20: {
21: register int fd;
22:
23: if (*++argv == NULL) {
24: filename = "[stdin]";
25: sum( 0, (char *)0);
26: }
27: else
28: while (filename = *argv++) {
29: if ((fd = open( filename, 0)) < 0) {
30: error( (char *)0);
31: continue;
32: }
33: sum( fd, argc>2? filename: (char *)0);
34: close(fd);
35: }
36:
37: return (err);
38: }
39:
40:
41: sum( fd, file)
42: int fd;
43: char *file;
44: {
45: register char *p;
46: register a,
47: n;
48: long size;
49: static char buf[BUFSZ];
50:
51: a = 0;
52: size = 0;
53:
54: while ((n=read( fd, buf, sizeof buf)) > 0) {
55: size += n;
56: p = buf;
57: do {
58: a += *p++;
59: } while (--n);
60: }
61:
62: if (n < 0)
63: error( errno==EIO? "read error": (char *)0);
64: printf( "%5u %2ld", a, (size+BUFSIZ-1)/BUFSIZ);
65: if (file)
66: printf( " %s", file);
67: printf( "\n");
68: }
69:
70:
71: error( mesg)
72: char *mesg;
73: {
74: extern char *sys_errlist[];
75:
76: fprintf( stderr, "sum: %s: %s\n", filename,
77: mesg? mesg: sys_errlist[errno]);
78: err = 1;
79: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.