Annotation of researchv10no/cmd/stat.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.