Annotation of 43BSDReno/contrib/isode-beta/dirent/readdir.c, revision 1.1.1.1

1.1       root        1: /*
                      2:        readdir -- read next entry from a directory stream
                      3: 
                      4:        last edit:      25-Apr-1987     D A Gwyn
                      5: */
                      6: 
                      7: #include       <sys/errno.h>
                      8: #include       <sys/types.h>
                      9: #include       "usr.dirent.h"
                     10: 
                     11: #ifndef        GETDENTS
                     12: extern int     getdents();             /* SVR3 system call, or emulation */
                     13: 
                     14: extern int     errno;
                     15: 
                     16: #ifndef NULL
                     17: #define        NULL    0
                     18: #endif
                     19: 
                     20: struct dirent *
                     21: readdir( dirp )
                     22:        register DIR            *dirp;  /* stream from opendir() */
                     23:        {
                     24:        register struct dirent  *dp;    /* -> directory data */
                     25: 
                     26:        if ( dirp == NULL || dirp->dd_buf == NULL )
                     27:                {
                     28:                errno = EFAULT;
                     29:                return NULL;            /* invalid pointer */
                     30:                }
                     31: 
                     32:        do      {
                     33:                if ( dirp->dd_loc >= dirp->dd_size )    /* empty or obsolete */
                     34:                        dirp->dd_loc = dirp->dd_size = 0;
                     35: 
                     36:                if ( dirp->dd_size == 0 /* need to refill buffer */
                     37:                  && (dirp->dd_size =
                     38:                        getdents( dirp->dd_fd, dirp->dd_buf, (unsigned)DIRBUF )
                     39:                     ) <= 0
                     40:                   )
                     41:                        return NULL;    /* EOF or error */
                     42: 
                     43:                dp = (struct dirent *)&dirp->dd_buf[dirp->dd_loc];
                     44:                dirp->dd_loc += dp->d_reclen;
                     45:                }
                     46:        while ( dp->d_ino == 0L );      /* don't rely on getdents() */
                     47: 
                     48:        return dp;
                     49:        }
                     50: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.