Annotation of 43BSDReno/sys/nfs/TEST/unix-tests/tools/dirdmp.c, revision 1.1

1.1     ! root        1: /*     @(#)dirdmp.c    1.2 90/01/03 NFS Rev 2 Testsuite
        !             2:  *     1.2 Lachman ONC Test Suite source
        !             3:  */
        !             4: 
        !             5: #include <sys/param.h>
        !             6: #ifndef major
        !             7: #include <sys/types.h>
        !             8: #endif
        !             9: #ifdef SVR3
        !            10: #include <dirent.h>
        !            11: #else
        !            12: #include <sys/dir.h>
        !            13: #endif
        !            14: #include <stdio.h>
        !            15: #include <ctype.h>
        !            16: 
        !            17: main(argc, argv)
        !            18:        int argc;
        !            19:        char *argv[];
        !            20: {
        !            21:        argv++;
        !            22:        argc--;
        !            23:        while (argc--) {
        !            24:                print(*argv++);
        !            25:        }
        !            26: }
        !            27: 
        !            28: print(dir)
        !            29:        char *dir;
        !            30: {
        !            31:        DIR *dirp;
        !            32: #ifdef SVR3
        !            33:        struct dirent *dp;
        !            34: #else
        !            35:        struct direct *dp;
        !            36: #endif
        !            37:        int rec = 0;
        !            38: 
        !            39:        dirp = opendir(dir);
        !            40:        if (dirp == NULL) {
        !            41:                perror(dir);
        !            42:                return;
        !            43:        }
        !            44:        while ((dp = readdir(dirp)) != NULL) ;
        !            45:        closedir(dirp);
        !            46: }
        !            47: 
        !            48: #include <sys/stat.h>
        !            49: 
        !            50: /*
        !            51:  * open a directory.
        !            52:  */
        !            53: DIR *
        !            54: opendir(name)
        !            55:        char *name;
        !            56: {
        !            57:        register DIR *dirp;
        !            58:        register int fd;
        !            59:        struct stat sb;
        !            60:        extern char *malloc();
        !            61: 
        !            62:        if ((fd = open(name, 0)) == -1) {
        !            63:                printf("open failed\n");
        !            64:                return (NULL);
        !            65:        }
        !            66:        if (fstat(fd, &sb) == -1) {
        !            67:                printf("stat failed\n");
        !            68:                return (NULL);
        !            69:        }
        !            70:        /*
        !            71:        if ((sb.st_mode & S_IFMT) != S_IFDIR) {
        !            72:                printf("not a directory\n");
        !            73:                return (NULL);
        !            74:        }
        !            75:        */
        !            76:        printf("%s mode %o dir %o\n", name, sb.st_mode, S_IFDIR);
        !            77:        if (((dirp = (DIR *)malloc(sizeof(DIR))) == NULL) ||
        !            78: #ifdef SVR3
        !            79:            ((dirp->dd_buf = malloc(DIRBUF)) == NULL)) {
        !            80: #else
        !            81:            ((dirp->dd_buf = malloc((int)sb.st_blksize)) == NULL)) {
        !            82: #endif
        !            83:                if (dirp) {
        !            84:                        if (dirp->dd_buf) {
        !            85:                                free(dirp->dd_buf);
        !            86:                        }
        !            87:                        free(dirp);
        !            88:                }
        !            89:                close(fd);
        !            90:                return (NULL);
        !            91:        }
        !            92: #ifndef SVR3
        !            93:        dirp->dd_bsize = sb.st_blksize;
        !            94:        dirp->dd_bbase = 0;
        !            95:        dirp->dd_entno = 0;
        !            96: #endif
        !            97:        dirp->dd_fd = fd;
        !            98:        dirp->dd_loc = 0;
        !            99:        return (dirp);
        !           100: }
        !           101: 
        !           102: /*
        !           103:  * get next entry in a directory.
        !           104:  */
        !           105: #ifdef SVR3
        !           106: struct dirent *
        !           107: #else
        !           108: struct direct *
        !           109: #endif
        !           110: readdir(dirp)
        !           111:        register DIR *dirp;
        !           112: {
        !           113: #ifdef SVR3
        !           114:        register struct dirent *dp;
        !           115: #else
        !           116:        register struct direct *dp;
        !           117: #endif
        !           118: 
        !           119:        for (;;) {
        !           120:                if (dirp->dd_loc == 0) {
        !           121: #ifdef SVR3
        !           122:                        dirp->dd_size = getdents(dirp->dd_fd,
        !           123:                            dirp->dd_buf, DIRBUF);
        !           124: #else
        !           125:                        dirp->dd_size = getdirentries(dirp->dd_fd,
        !           126:                            dirp->dd_buf, dirp->dd_bsize, &dirp->dd_bbase);
        !           127: #endif
        !           128:                        if (dirp->dd_size <= 0) {
        !           129:                                printf("EOF\n");
        !           130:                                return (NULL);
        !           131:                        }
        !           132: #ifndef SVR3
        !           133:                        dirp->dd_entno = 0;
        !           134: #endif
        !           135:                }
        !           136:                if (dirp->dd_loc >= dirp->dd_size) {
        !           137:                        printf("EOB offset %d\n", tell(dirp->dd_fd));
        !           138:                        dirp->dd_loc = 0;
        !           139:                        continue;
        !           140:                }
        !           141: #ifdef SVR3
        !           142:                dp = (struct dirent *)(dirp->dd_buf + dirp->dd_loc);
        !           143: #else
        !           144:                dp = (struct direct *)(dirp->dd_buf + dirp->dd_loc);
        !           145: #endif
        !           146:                if (dp->d_reclen <= 0) {
        !           147:                        printf("0 reclen\n");
        !           148:                        return (NULL);
        !           149:                }
        !           150:                dirp->dd_loc += dp->d_reclen;
        !           151: #ifndef SVR3
        !           152:                dirp->dd_entno++;
        !           153: #endif
        !           154: #ifdef SVR3
        !           155:                printf("%5d %5ld %5d %s\n",
        !           156:                    dirp->dd_loc, dp->d_ino, dp->d_reclen,
        !           157:                    dp->d_name);
        !           158: #else
        !           159:                printf("%5d %5d %5d %5d %s\n",
        !           160:                    dirp->dd_loc, dp->d_fileno, dp->d_reclen,
        !           161:                    dp->d_namlen, dp->d_name);
        !           162: #endif
        !           163: #ifdef SVR3
        !           164:                if (dp->d_ino == 0) {
        !           165: #else
        !           166:                if (dp->d_fileno == 0) {
        !           167: #endif
        !           168:                        continue;
        !           169:                }
        !           170:                return (dp);
        !           171:        }
        !           172: }

unix.superglobalmegacorp.com

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