summaryrefslogtreecommitdiff
path: root/dviware/umddvi/libcompat/seekdir.c
diff options
context:
space:
mode:
Diffstat (limited to 'dviware/umddvi/libcompat/seekdir.c')
-rw-r--r--dviware/umddvi/libcompat/seekdir.c33
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" */
+ }