Annotation of researchv10no/cmd/stat.c, revision 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.