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]
patch: telldir() and seekdir()
- To: cygwin-developers@sourceware.cygnus.com
- Subject: patch: telldir() and seekdir()
- From: Corinna Vinschen <corinna.vinschen@cityweb.de>
- Date: Fri, 12 Mar 1999 23:29:46 +0100
- Delivered-To: listarch-cygwin-developers@sourceware.cygnus.com
- Delivered-To: mailing list cygwin-developers@sourceware.cygnus.com
- Mailing-List: contact cygwin-developers-help@sourceware.cygnus.com; run by ezmlm
- Sender: cygwin-developers-owner@sourceware.cygnus.com
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 *);