|
|
1.1 ! root 1: /* Copyright (c) 1982 Regents of the University of California */ ! 2: ! 3: #include "config.h" ! 4: #ifdef LOCALDIR ! 5: #include <sys/types.h> ! 6: #include "ndir.h" ! 7: ! 8: static char sccsid[] = "@(#)readdir.c 4.2 3/12/82"; ! 9: ! 10: /* ! 11: * read an old stlye directory entry and present it as a new one ! 12: */ ! 13: #define ODIRSIZ 14 ! 14: ! 15: struct olddirect { ! 16: ino_t d_ino; ! 17: char d_name[ODIRSIZ]; ! 18: }; ! 19: ! 20: /* ! 21: * get next entry in a directory. ! 22: */ ! 23: struct direct * ! 24: readdir(dirp) ! 25: register DIR *dirp; ! 26: { ! 27: register struct olddirect *dp; ! 28: static struct direct dir; ! 29: ! 30: for (;;) { ! 31: if (dirp->dd_loc == 0) { ! 32: dirp->dd_size = read(dirp->dd_fd, dirp->dd_buf, ! 33: DIRBLKSIZ); ! 34: if (dirp->dd_size <= 0) ! 35: return NULL; ! 36: } ! 37: if (dirp->dd_loc >= dirp->dd_size) { ! 38: dirp->dd_loc = 0; ! 39: continue; ! 40: } ! 41: dp = (struct olddirect *)(dirp->dd_buf + dirp->dd_loc); ! 42: dirp->dd_loc += sizeof(struct olddirect); ! 43: if (dp->d_ino == 0) ! 44: continue; ! 45: dir.d_ino = dp->d_ino; ! 46: strncpy(dir.d_name, dp->d_name, ODIRSIZ); ! 47: dir.d_name[ODIRSIZ] = '\0'; /* insure null termination */ ! 48: dir.d_namlen = strlen(dir.d_name); ! 49: dir.d_reclen = DIRSIZ(&dir); ! 50: return (&dir); ! 51: } ! 52: } ! 53: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.