|
|
1.1 root 1: /* @(#)dirprt.c 1.2 90/01/03 NFS Rev 2 Testsuite
2: * 1.2 Lachman ONC Test Suite source";
3: */
4: #include <sys/param.h>
5: #ifndef major
6: #include <sys/types.h>
7: #endif
8: #ifdef SVR3
9: #include <dirent.h>
10: #else
11: #include <sys/dir.h>
12: #endif
13: #include <stdio.h>
14: #include <ctype.h>
15:
16: main(argc, argv)
17: int argc;
18: char *argv[];
19: {
20: argv++;
21: argc--;
22: while (argc--) {
23: print(*argv++);
24: }
25: }
26:
27: print(dir)
28: char *dir;
29: {
30: DIR *dirp;
31: #ifdef SVR3
32: struct dirent *dp;
33: #else
34: struct direct *dp;
35: #endif
36: int rec = 0;
37:
38: dirp = opendir(dir);
39: if (dirp == NULL) {
40: perror(dir);
41: return;
42: }
43: while ((dp = readdir(dirp)) != NULL) {
44: #ifdef SVR3
45: printf("%5d %5ld %5d %s\n",
46: telldir(dirp),dp->d_ino, dp->d_reclen,
47: dp->d_name);
48: #else
49: printf("%5d %5d %5d %5d %s\n",
50: telldir(dirp),dp->d_fileno, dp->d_reclen,
51: dp->d_namlen, dp->d_name);
52: #endif
53: }
54: closedir(dirp);
55: }
56:
57: #include <sys/stat.h>
58:
59: /*
60: * open a directory.
61: */
62: DIR *
63: opendir(name)
64: char *name;
65: {
66: register DIR *dirp;
67: register int fd;
68: struct stat sb;
69: extern char *malloc();
70:
71: if ((fd = open(name, 0)) == -1) {
72: printf("open failed\n");
73: return (NULL);
74: }
75: if (fstat(fd, &sb) == -1) {
76: printf("stat failed\n");
77: return (NULL);
78: }
79: if ((sb.st_mode & S_IFMT) != S_IFDIR) {
80: printf("not a directory\n");
81: return (NULL);
82: }
83: printf("%s mode %o dir %o\n", name, sb.st_mode, S_IFDIR);
84: if (((dirp = (DIR *)malloc(sizeof(DIR))) == NULL) ||
85: #ifdef SVR3
86: ((dirp->dd_buf = malloc(DIRBUF)) == NULL)) {
87: #else
88: ((dirp->dd_buf = malloc((int)sb.st_blksize)) == NULL)) {
89: #endif
90: if (dirp) {
91: if (dirp->dd_buf) {
92: free(dirp->dd_buf);
93: }
94: free(dirp);
95: }
96: close(fd);
97: return (NULL);
98: }
99: #ifndef SVR3
100: dirp->dd_bsize = sb.st_blksize;
101: dirp->dd_bbase = 0;
102: dirp->dd_entno = 0;
103: #endif
104: dirp->dd_fd = fd;
105: dirp->dd_loc = 0;
106: return (dirp);
107: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.