Mailing-List: contact cygwin-developers-help AT sourceware DOT cygnus DOT com; run by ezmlm Sender: cygwin-developers-owner AT sourceware DOT cygnus DOT com Delivered-To: mailing list cygwin-developers AT sourceware DOT cygnus DOT com From: Chris Faylor Date: Fri, 12 Mar 1999 23:39:27 -0500 To: Corinna Vinschen Cc: cygwin-developers AT sourceware DOT cygnus DOT com Subject: Re: patch: telldir() and seekdir() Message-ID: <19990312233927.A7402@cygnus.com> References: <36E9955A DOT 19238FA5 AT cityweb DOT de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 0.95.3i In-Reply-To: <36E9955A.19238FA5@cityweb.de>; from Corinna Vinschen on Fri, Mar 12, 1999 at 11:29:46PM +0100 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 > > * 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 AT cygnus DOT com http://www.cygnus.com/