]> CyberLeo.Net >> Repos - CDN/.attic/crc32sum.git/blob - main.c
Stub manpage
[CDN/.attic/crc32sum.git] / main.c
1 #include <unistd.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include "crc32.h"
5
6 void help() {
7   printf("-x -X -d -h\n");
8   exit(EXIT_FAILURE);
9 }
10
11 int main (int argc, char *argv[]) {
12   int c;
13   FILE * fp;
14   uint32_t crc;
15   unsigned char *fmt = "%08x\t%s\n";
16   int prog_return = EXIT_SUCCESS;
17
18   int blksz = 4096;
19   unsigned char bufr[blksz];
20   
21   while (( c = getopt(argc, argv, "hXxd")) != -1) {
22     switch (c) {
23       case 'x':
24         fmt = "%08x\t%s\n";
25         break;
26       case 'X':
27         fmt = "%08X\t%s\n";
28         break;
29       case 'd':
30         fmt = "%d\t%s\n";
31         break;
32       case 'h':
33       case '?':
34         help();
35         break;
36     }
37   }
38   
39   chksum_crc32_gentab();
40   
41   if (optind == argc) {
42     crc = 0;
43     while (!feof(stdin)) {
44       if ((c = fread(bufr, 1, blksz, stdin)) > 0) {
45         chksum_crc32(bufr, c, &crc);
46       }
47     }
48     printf(fmt, crc, "-");
49   } else {  
50     for ( ; optind < argc; optind++) {
51       if (0 == strcmp("-", argv[optind])) {
52         crc = 0;
53         while (!feof(stdin)) {
54           if ((c = fread(bufr, 1, blksz, stdin)) > 0) {
55             chksum_crc32(bufr, c, &crc);
56           }
57         }
58         printf(fmt, crc, "-");
59       } else if (access(argv[optind], R_OK) == 0) {
60         crc = 0;
61         if (fp = fopen(argv[optind], "r")) {
62           while (!feof(fp))
63             if ((c = fread(bufr, 1, blksz, fp)) > 0)
64               chksum_crc32(bufr, c, &crc);
65         } else {
66           strerror();
67         }
68         printf(fmt, crc, argv[optind]);
69       } else {
70         fprintf(stderr, "NG: %s\n", argv[optind]);
71         prog_return++;
72       }
73     }
74   }
75   exit(prog_return);
76 }