1 /* ------------------------------------------------------------------------ */
3 /* lhdir.c -- Directory access routine */
5 /* Copyright (C) MCMLXXXIX Yooichi.Tagawa */
6 /* Modified Nobutaka Watazaki */
8 /* Emulate opendir(),readdir(),closedir() function for LHarc */
10 /* Ver. 0.00 Original 1988.05.31 Y.Tagawa */
11 /* Ver. 0.03 Release #3 for LHarc UNIX 1988.07.02 Y.Tagawa */
12 /* Ver. 1.00 Fixed 1989.09.22 Y.Tagawa */
13 /* Ver. 1.14 Source All chagned 1995.01.14 N.Watazaki */
14 /* ------------------------------------------------------------------------ */
17 /* Where is O_RDONLY ? (^_^) */
24 #define direct old_direct
31 /* Warning : Are you sure? (normally defined in <sys/dir.h> */
37 /* ------------------------------------------------------------------------ */
45 if ((fd = open(name, O_RDONLY)) >= 0) {
46 if ((dirp = (DIR *) malloc(sizeof(DIR))) != (DIR *) 0) {
59 /* ------------------------------------------------------------------------ */
64 static struct direct lhdir;
65 register struct old_direct *dp;
68 if (dirp->dd_loc >= dirp->dd_size) {
70 if ((dirp->dd_size = read(dirp->dd_fd, dirp->dd_buf, DIRBLKSIZ)) <= 0)
71 return (struct direct *) 0;
74 dp = (struct old_direct *) (dirp->dd_buf + dirp->dd_loc);
76 if (dirp->dd_loc + sizeof(struct old_direct) > dirp->dd_size)
77 return (struct direct *) 0;
79 dirp->dd_loc += sizeof(struct old_direct);
81 } while (dp->d_ino == 0);
83 /* construct new format */
84 lhdir.d_ino = dp->d_ino;
85 strncpy(lhdir.d_name, dp->d_name, DIRSIZ);
86 lhdir.d_name[DIRSIZ] = '\0';
87 lhdir.d_namlen = strlen(lhdir.d_name);
92 /* ------------------------------------------------------------------------ */
99 /* Local Variables: */
102 /* vi: set tabstop=4: */