diff options
Diffstat (limited to 'dviware/umddvi/libcompat/seekdir.c')
-rw-r--r-- | dviware/umddvi/libcompat/seekdir.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/dviware/umddvi/libcompat/seekdir.c b/dviware/umddvi/libcompat/seekdir.c new file mode 100644 index 0000000000..dc29f48baa --- /dev/null +++ b/dviware/umddvi/libcompat/seekdir.c @@ -0,0 +1,33 @@ +/* + seekdir -- C library extension routine + + last edit: 21-Jan-1984 D A Gwyn +*/ + +#include <dir.h> + +extern long lseek(); + +#define NULL 0 + +void +seekdir( dirp, loc ) + register DIR *dirp; /* stream from opendir() */ + long loc; /* position from telldir() */ + { + long base; /* file location of block */ + long offset; /* offset within block */ + + if ( telldir( dirp ) == loc ) + return; /* save time */ + + offset = loc % DIRBLKSIZ; + base = loc - offset; + + (void)lseek( dirp->dd_fd, base, 0 ); /* change blocks */ + dirp->dd_loc = dirp->dd_size = 0; + + while ( dirp->dd_loc < offset ) /* skip entries */ + if ( readdir( dirp ) == NULL ) + return; /* "can't happen" */ + } |