|
|
1.1 ! root 1: #include "stdio.h" ! 2: #include "ftw.h" ! 3: #include "sys/param.h" ! 4: #include "sys/stat.h" ! 5: ! 6: #define MAXNAME 1024 ! 7: #define BLOKSIZE 1024 ! 8: ! 9: char buf[BUFSIZ]; ! 10: ! 11: main(argc, argv) ! 12: char **argv; ! 13: { int i, pr(); ! 14: struct stat stb; ! 15: if (argc < 2) argc = 2; /* use current dir if no args */ ! 16: for (i = 1; i < argc; i++) { ! 17: if(stat(argv[i],&stb)) { perror(argv[i]); exit(1); } ! 18: ftw(argv[i], pr, 12); ! 19: } ! 20: exit(0); ! 21: } ! 22: ! 23: int pr(s, p, n0) ! 24: char *s; ! 25: int n0; ! 26: struct stat *p; ! 27: { int fd; ! 28: register char *x; ! 29: register int i, n; ! 30: register unsigned sum; ! 31: void sym_skip_msg(); ! 32: ! 33: #ifdef S_IFLNK ! 34: if (n0 == FTW_SL) /* symbolic link */ { ! 35: sym_skip_msg(s); ! 36: return 0; ! 37: } ! 38: #endif ! 39: ! 40: if((p->st_mode & S_IFMT) != S_IFREG) /* if not an ordinary file */ ! 41: return(0); ! 42: if((fd = open(s, 0)) < 0) { perror(s); return 0; } ! 43: sum = 0; ! 44: while((n = read(fd, buf, sizeof(buf))) > 0) ! 45: for(i = 0, x = buf; i < n; x++, i++) { ! 46: if (sum&01) ! 47: sum = (sum>>1) + 0x8000; ! 48: else ! 49: sum >>= 1; ! 50: sum += *x&0377; ! 51: sum &= 0xFFFF; ! 52: } ! 53: if (n==0) ! 54: printf("%05u%6ld %s\n", sum, (p->st_size+BLOKSIZE-1)/BLOKSIZE, s); ! 55: else { perror(s); } ! 56: close(fd); ! 57: return(0); ! 58: } ! 59: ! 60: #ifdef S_IFLNK ! 61: void ! 62: sym_skip_msg(s) ! 63: char *s; ! 64: { ! 65: char symname[MAXNAME]; ! 66: int i; ! 67: i = readlink(s, symname, MAXNAME); ! 68: if (i >= MAXNAME) i = MAXNAME - 1; ! 69: symname[i] = 0; ! 70: printf("skipped symbolic link %s --> %s\n",s,symname); ! 71: } ! 72: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.