This is the mail archive of the cygwin-developers@sourceware.cygnus.com mailing list for the Cygwin project. See the Cygwin home page for more information.
[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index] [Subject Index] [Author Index] [Thread Index]

Re: patch: telldir() and seekdir()



Could you rewrite this patch and change the name from __find_first_called
to something more descriptive?

I removed the dependency on this field a while ago so I think it is safe
to change it as long as you replace it with something that is 4 bytes
in size in the same location in the structure.

cgf

On Fri, Mar 12, 1999 at 11:29:46PM +0100, Corinna Vinschen wrote:
>Hi,
>
>attached is a small patch to winsup, which implements the
>functions telldir() and seekdir(). They are using the
>currently unused struct element DIR::__d_find_first_called
>to remember the position for tell and seek.
>Of course, the file `dirent.h' from newlib/libc/sys/cygwin/sys is
>changed, too.
>
>Regards,
>Corinna
>
>ChangeLog:
>==========
>
>Fri Mar 12 23:23:00  Corinna Vinschen  <corinna.vinschen@cityweb.de>
>
>	* dir.cc: New functions `telldir()' and `seekdir()'.
>	* cygwin.def: Ditto.
>	* newlib/libc/sys/cygwin/sys/dirent.h: Additional prototypes
>	for `telldir()' and `seekdir()'.
>
>======== snip ========
>--- dir.cc      1999/03/07 22:05:34     1.3
>+++ dir.cc      1999/03/12 22:11:22
>@@ -106,2 +106,3 @@ opendir (const char *dirname)
>   dir->__d_u.__d_data.__handle = INVALID_HANDLE_VALUE;
>+  dir->__d_find_first_called = 0;
>   dir->__d_dirhash = statbuf.st_ino;
>@@ -202,2 +203,3 @@ readdir (DIR * dir)
>
>+  ++dir->__d_find_first_called;
>   res = dir->__d_dirent;
>@@ -206,2 +208,22 @@ readdir (DIR * dir)
>   return res;
>+}
>+
>+/* telldir */
>+extern "C"
>+off_t
>+telldir (DIR * dir)
>+{
>+  return (off_t) dir->__d_find_first_called;
>+}
>+
>+/* seekdir */
>+extern "C"
>+void
>+seekdir (DIR * dir, off_t loc)
>+{
>+  rewinddir (dir);
>+  dir->__d_find_first_called = 0;
>+  while (loc > dir->__d_find_first_called)
>+    if (! readdir (dir))
>+      break;
> }
>--- cygwin.def.orig     Sat Mar 13 00:25:27 1999
>+++ cygwin.def  Sat Mar 13 00:12:58 1999
>@@ -495,2 +495,4 @@ random
> initstate
>+seekdir
>+_seekdir = seekdir
> setstate
>@@ -727,2 +729,4 @@ tcsetpgrp
> _tcsetpgrp = tcsetpgrp
>+telldir
>+_telldir = telldir
> tempnam
>--- newlib/libc/sys/cygwin/sys/dirent.h.orig    Sat Mar 13 00:27:01 1999
>+++ newlib/libc/sys/cygwin/sys/dirent.h Sat Mar 13 00:06:46 1999
>@@ -41,2 +41,4 @@ typedef struct
> DIR *opendir (const char *);
>+off_t telldir (DIR *);
>+void seekdir (DIR *, off_t loc);
> struct dirent *readdir (DIR *);
>

-- 
cgf@cygnus.com
http://www.cygnus.com/