|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include <sys/param.h> ! 3: #include <sys/stat.h> ! 4: #include <sys/ino.h> ! 5: #include <time.h> ! 6: ! 7: #define tp(x,y) {if(j&x) putchar(y); else putchar('-');} ! 8: ! 9: struct stat sbuf; ! 10: struct dinode dsbuf; ! 11: ! 12: main(argc,argv) char *argv[]; ! 13: { ! 14: int i,j; ! 15: int f, iflag=0; ! 16: unsigned ino; ! 17: char *tm; ! 18: ! 19: for(i=1;i<argc;i++) { ! 20: if (strcmp(argv[i], "-i")==0) { ! 21: iflag++; ! 22: i++; ! 23: f = open(argv[i], 0); ! 24: if (f<0) { ! 25: printf("stat: can't open %s\n", argv[i]); ! 26: exit(2); ! 27: } ! 28: continue; ! 29: } ! 30: if (iflag) { ! 31: ino = atoi(argv[i]); ! 32: lseek(f, (ino-1)*64L+1024, 0); ! 33: j = 0; ! 34: if (read(f, &dsbuf, sizeof(dsbuf)) != sizeof(dsbuf)) ! 35: j = -1; ! 36: sbuf.st_mode = dsbuf.di_mode; ! 37: sbuf.st_nlink = dsbuf.di_nlink; ! 38: sbuf.st_uid = dsbuf.di_uid; ! 39: sbuf.st_gid = dsbuf.di_gid; ! 40: sbuf.st_size = dsbuf.di_size; ! 41: sbuf.st_atime = dsbuf.di_atime; ! 42: sbuf.st_mtime = dsbuf.di_mtime; ! 43: sbuf.st_ctime = dsbuf.di_ctime; ! 44: sbuf.st_rdev = 0; ! 45: sbuf.st_dev = 0; ! 46: } else if (strcmp(argv[i], "-")==0) ! 47: j = fstat(atoi(argv[i]+1)); ! 48: else ! 49: j = stat(argv[i],&sbuf); ! 50: if(j==-1) { ! 51: perror(argv[i]); ! 52: continue; ! 53: } ! 54: j=sbuf.st_mode; ! 55: switch(j&S_IFMT) { ! 56: case S_IFREG: putchar('-'); break; ! 57: case S_IFDIR: putchar('d'); break; ! 58: case S_IFCHR: putchar('c'); break; ! 59: case S_IFBLK: putchar('b'); break; ! 60: default: putchar('?'); break; ! 61: } ! 62: tp(S_ISUID,'u'); ! 63: tp(S_ISGID,'g'); ! 64: tp(S_ISVTX,'t'); ! 65: tp(0400,'r'); ! 66: tp(0200,'w'); ! 67: tp(0100,'x'); ! 68: tp(040,'r'); ! 69: tp(020,'w'); ! 70: tp(010,'x'); ! 71: tp(4,'r'); ! 72: tp(2,'w'); ! 73: tp(1,'x'); ! 74: putchar(' '); ! 75: printf("M%d m%d Mr%d mr%d u%d g%d L%d %ld i%u: %s\n", ! 76: major(sbuf.st_dev),minor(sbuf.st_dev), ! 77: major(sbuf.st_rdev),minor(sbuf.st_rdev), ! 78: sbuf.st_uid,sbuf.st_gid,sbuf.st_nlink, ! 79: sbuf.st_size,sbuf.st_ino,argv[i]); ! 80: ptime(&sbuf.st_atime); ! 81: ptime(&sbuf.st_mtime); ! 82: ptime(&sbuf.st_ctime); ! 83: printf("\n\n"); ! 84: } ! 85: } ! 86: ! 87: ptime(t) ! 88: long *t; ! 89: { ! 90: register struct tm *ctp; ! 91: ! 92: ctp = localtime(t); ! 93: printf(" %02d:%02d:%02d %02d/%02d/%02d", ! 94: ctp->tm_hour, ctp->tm_min, ctp->tm_sec, ! 95: ctp->tm_year, ctp->tm_mon+1, ctp->tm_mday); ! 96: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.