15751Smckusick /* Copyright (c) 1982 Regents of the University of California */ 25751Smckusick 3*6370Smckusic static char sccsid[] = "@(#)readdir.c 4.3 03/30/82"; 45751Smckusick 5*6370Smckusic #include <sys/param.h> 65751Smckusick #include <ndir.h> 75751Smckusick 85751Smckusick /* 95767Smckusic * read an old stlye directory entry and present it as a new one 105767Smckusic */ 115872Smckusic #define ODIRSIZ 14 125767Smckusic 135767Smckusic struct olddirect { 145767Smckusic ino_t d_ino; 155872Smckusic 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; 265872Smckusic static struct direct dir; 275751Smckusick 285751Smckusick for (;;) { 295751Smckusick if (dirp->dd_loc == 0) { 305756Smckusic dirp->dd_size = read(dirp->dd_fd, dirp->dd_buf, 315872Smckusic 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; 445872Smckusic strncpy(dir.d_name, dp->d_name, ODIRSIZ); 456122Smckusic dir.d_name[ODIRSIZ] = '\0'; /* insure null termination */ 465766Smckusic dir.d_namlen = strlen(dir.d_name); 475872Smckusic dir.d_reclen = DIRSIZ(&dir); 485766Smckusic return (&dir); 495751Smckusick } 505751Smckusick } 51