15751Smckusick /* Copyright (c) 1982 Regents of the University of California */ 25751Smckusick 3*5872Smckusic static char sccsid[] = "@(#)readdir.c 1.5 02/16/82"; 45751Smckusick 55751Smckusick #include <sys/types.h> 65751Smckusick #include <ndir.h> 75751Smckusick 85751Smckusick /* 95767Smckusic * read an old stlye directory entry and present it as a new one 105767Smckusic */ 11*5872Smckusic #define ODIRSIZ 14 125767Smckusic 135767Smckusic struct olddirect { 145767Smckusic ino_t d_ino; 15*5872Smckusic char d_name[ODIRSIZ]; 165767Smckusic }; 175767Smckusic 185767Smckusic /* 195751Smckusick * get next entry in a directory. 205751Smckusick */ 215751Smckusick struct direct * 225751Smckusick readdir(dirp) 235751Smckusick register DIR *dirp; 245751Smckusick { 255766Smckusic register struct olddirect *dp; 26*5872Smckusic static struct direct dir; 275751Smckusick 285751Smckusick for (;;) { 295751Smckusick if (dirp->dd_loc == 0) { 305756Smckusic dirp->dd_size = read(dirp->dd_fd, dirp->dd_buf, 31*5872Smckusic DIRBLKSIZ); 325751Smckusick if (dirp->dd_size <= 0) 335751Smckusick return NULL; 345751Smckusick } 355751Smckusick if (dirp->dd_loc >= dirp->dd_size) { 365751Smckusick dirp->dd_loc = 0; 375751Smckusick continue; 385751Smckusick } 395766Smckusic dp = (struct olddirect *)(dirp->dd_buf + dirp->dd_loc); 405766Smckusic dirp->dd_loc += sizeof(struct olddirect); 415766Smckusic if (dp->d_ino == 0) 425766Smckusic continue; 435766Smckusic dir.d_ino = dp->d_ino; 44*5872Smckusic strncpy(dir.d_name, dp->d_name, ODIRSIZ); 455766Smckusic dir.d_namlen = strlen(dir.d_name); 46*5872Smckusic dir.d_reclen = DIRSIZ(&dir); 475766Smckusic return (&dir); 485751Smckusick } 495751Smckusick } 50