add Berkeley specific header; written by Sam Leffler
[unix-history] / usr / src / lib / libc / gen / seekdir.c
index 49e8d24..8d4a2ec 100644 (file)
@@ -1,13 +1,30 @@
-/* Copyright (c) 1982 Regents of the University of California */
+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
 
 
-static char sccsid[] = "@(#)seekdir.c 4.7 %G%";
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)seekdir.c  5.3 (Berkeley) %G%";
+#endif /* LIBC_SCCS and not lint */
 
 #include <sys/param.h>
 
 #include <sys/param.h>
-#include <dir.h>
+#include <sys/dir.h>
 
 /*
  * seek to an entry in a directory.
 
 /*
  * seek to an entry in a directory.
- * Only values returned by ``telldir'' should be passed to seekdir.
+ * Only values returned by "telldir" should be passed to seekdir.
  */
 void
 seekdir(dirp, loc)
  */
 void
 seekdir(dirp, loc)
@@ -16,17 +33,14 @@ seekdir(dirp, loc)
 {
        long curloc, base, offset;
        struct direct *dp;
 {
        long curloc, base, offset;
        struct direct *dp;
+       extern long lseek();
 
        curloc = telldir(dirp);
        if (loc == curloc)
                return;
        base = loc & ~(DIRBLKSIZ - 1);
        offset = loc & (DIRBLKSIZ - 1);
 
        curloc = telldir(dirp);
        if (loc == curloc)
                return;
        base = loc & ~(DIRBLKSIZ - 1);
        offset = loc & (DIRBLKSIZ - 1);
-       if (dirp->dd_loc != 0 && (curloc & ~(DIRBLKSIZ - 1)) == base) {
-               dirp->dd_loc = offset;
-               return;
-       }
-       lseek(dirp->dd_fd, base, 0);
+       (void) lseek(dirp->dd_fd, base, 0);
        dirp->dd_loc = 0;
        while (dirp->dd_loc < offset) {
                dp = readdir(dirp);
        dirp->dd_loc = 0;
        while (dirp->dd_loc < offset) {
                dp = readdir(dirp);