|
|
1.1 ! root 1: /* @(#)stat.c 1.2 90/01/03 NFS Rev 2 Testsuite ! 2: * 1.4 Lachman ONC Test Suite source ! 3: * ! 4: * stat all of the files in a directory tree ! 5: */ ! 6: #include <stdio.h> ! 7: #include <sys/types.h> ! 8: #include <sys/stat.h> ! 9: #ifdef SVR3 ! 10: #include <sys/fs/nfs/time.h> ! 11: #include <dirent.h> ! 12: #else ! 13: #include <sys/time.h> ! 14: #include <sys/dir.h> ! 15: #endif ! 16: ! 17: int stats = 0; ! 18: int readdirs = 0; ! 19: ! 20: main(argc, argv) ! 21: int argc; ! 22: char *argv[]; ! 23: { ! 24: struct timeval stim, etim; ! 25: float elapsed; ! 26: ! 27: if (argc != 2) { ! 28: fprintf(stderr, "usage: %s dir\n", argv[0]); ! 29: exit(1); ! 30: } ! 31: ! 32: gettimeofday(&stim, 0); ! 33: statit(argv[1]); ! 34: gettimeofday(&etim, 0); ! 35: elapsed = (float) (etim.tv_sec - stim.tv_sec) + ! 36: (float)(etim.tv_usec - stim.tv_usec) / 1000000.0; ! 37: fprintf(stdout, "%d calls in %f seconds (%f calls/sec)\n", ! 38: stats, elapsed, (float)stats / elapsed); ! 39: exit(0); ! 40: } ! 41: ! 42: statit(name) ! 43: char *name; ! 44: { ! 45: struct stat statb; ! 46: #ifdef SVR3 ! 47: struct dirent *di; ! 48: #else ! 49: struct direct *di; ! 50: #endif ! 51: DIR *dirp; ! 52: long loc; ! 53: ! 54: #ifdef SVR3 ! 55: if (stat(name, &statb) < 0) { ! 56: #else ! 57: if (lstat(name, &statb) < 0) { ! 58: #endif ! 59: perror(name); ! 60: } ! 61: if ((statb.st_mode & S_IFMT) != S_IFDIR) { ! 62: return; ! 63: } ! 64: ! 65: if ((dirp = opendir(name)) == NULL) { ! 66: perror(name); ! 67: return; ! 68: } ! 69: stats++; ! 70: chdir(name); ! 71: ! 72: while ((di = readdir(dirp)) != NULL) { ! 73: if (strcmp(di->d_name, ".") == 0 || strcmp(di->d_name, "..") == 0) ! 74: continue; ! 75: #ifdef SVR3 ! 76: if (stat(di->d_name, &statb) < 0) { ! 77: #else ! 78: if (lstat(di->d_name, &statb) < 0) { ! 79: #endif ! 80: perror(di->d_name); ! 81: } ! 82: stats++; ! 83: if ((statb.st_mode & S_IFMT) == S_IFDIR) { ! 84: loc = telldir(dirp); ! 85: closedir(dirp); ! 86: statit(di->d_name); ! 87: if ((dirp = opendir(".")) == NULL) { ! 88: perror(name); ! 89: chdir(".."); ! 90: return; ! 91: } ! 92: seekdir(dirp, loc); ! 93: } ! 94: } ! 95: chdir(".."); ! 96: return; ! 97: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.