diff options
Diffstat (limited to 'winsup')
-rw-r--r-- | winsup/cygwin/ChangeLog | 16 | ||||
-rw-r--r-- | winsup/cygwin/dir.cc | 20 | ||||
-rw-r--r-- | winsup/cygwin/fhandler.h | 8 | ||||
-rw-r--r-- | winsup/cygwin/fhandler_registry.cc | 1 | ||||
-rw-r--r-- | winsup/cygwin/fhandler_virtual.cc | 4 |
5 files changed, 34 insertions, 15 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 296b0f57e..b92fedb88 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,5 +1,21 @@ 2005-03-16 Christopher Faylor <cgf@timesys.com> + * dir.cc: Rename opendir_* to dirent_* throughout. + (opendir_states): Move and rename. + * fhandler.h (dirent_states): to here. + * fhandler_disk_file.cc (fhandler_disk_file::readdir): Use raw readdir + when skipping through entries since it is keeping track of "." and + "..". + (fhandler_cygdrive::seekdir): Use fhandler_disk_file::readdir to do + everything. + * fhandler_virtual.cc (fhandler_virtual::opendir): Set flag indicating + that we provide . and .. + (fhandler_virtual::seekdir): Ditto. + (fhandler_virtual::rewinddir): Ditto. + * fhandler_registry.cc (fhandler_registry::rewinddir): Ditto. + +2005-03-16 Christopher Faylor <cgf@timesys.com> + * cygtls.cc (free_local): New macro. (_cygtls::remove): Use free_local to free known-malloced local variables. diff --git a/winsup/cygwin/dir.cc b/winsup/cygwin/dir.cc index e74498fb0..5aabcd370 100644 --- a/winsup/cygwin/dir.cc +++ b/winsup/cygwin/dir.cc @@ -38,14 +38,6 @@ dirfd (DIR *dir) return dir->__d_dirent->d_fd; } -enum opendir_states -{ - opendir_ok = 0, - opendir_saw_dot = 1, - opendir_saw_dot_dot = 2, - opendir_saw_eof = 4 -}; - /* opendir: POSIX 5.1.2.1 */ extern "C" DIR * opendir (const char *name) @@ -89,18 +81,18 @@ readdir (DIR *dir) if (!res) { - if (!(dir->__flags & opendir_saw_dot)) + if (!(dir->__flags & dirent_saw_dot)) { res = dir->__d_dirent; strcpy (res->d_name, "."); - dir->__flags |= opendir_saw_dot; + dir->__flags |= dirent_saw_dot; dir->__d_position++; } - else if (!(dir->__flags & opendir_saw_dot_dot)) + else if (!(dir->__flags & dirent_saw_dot_dot)) { res = dir->__d_dirent; strcpy (res->d_name, ".."); - dir->__flags |= opendir_saw_dot_dot; + dir->__flags |= dirent_saw_dot_dot; dir->__d_position++; } } @@ -114,13 +106,13 @@ readdir (DIR *dir) if (res->d_name[1] == '\0') { dir->__d_dirent->d_ino = dir->__d_dirhash; - dir->__flags |= opendir_saw_dot; + dir->__flags |= dirent_saw_dot; } else if (res->d_name[1] != '.' || res->d_name[2] != '\0') goto hashit; else { - dir->__flags |= opendir_saw_dot_dot; + dir->__flags |= dirent_saw_dot_dot; char *p, up[strlen (dir->__d_dirname) + 1]; strcpy (up, dir->__d_dirname); if (!(p = strrchr (up, '\\'))) diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index bdc8d3b8a..2d5998b3b 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -38,6 +38,14 @@ struct dirent; struct iovec; struct __acl32; +enum dirent_states +{ + dirent_ok = 0, + dirent_saw_dot = 1, + dirent_saw_dot_dot = 2, + dirent_saw_eof = 4 +}; + enum conn_state { unconnected = 0, diff --git a/winsup/cygwin/fhandler_registry.cc b/winsup/cygwin/fhandler_registry.cc index ad6d63867..383643b1e 100644 --- a/winsup/cygwin/fhandler_registry.cc +++ b/winsup/cygwin/fhandler_registry.cc @@ -378,6 +378,7 @@ fhandler_registry::rewinddir (DIR * dir) dir->__handle = INVALID_HANDLE_VALUE; } dir->__d_position = 0; + dir->__flags = dirent_saw_dot | dirent_saw_dot_dot; return; } diff --git a/winsup/cygwin/fhandler_virtual.cc b/winsup/cygwin/fhandler_virtual.cc index 21798994a..32d700a4d 100644 --- a/winsup/cygwin/fhandler_virtual.cc +++ b/winsup/cygwin/fhandler_virtual.cc @@ -83,7 +83,7 @@ fhandler_virtual::opendir () dir->__handle = INVALID_HANDLE_VALUE; dir->__d_position = 0; dir->__d_dirhash = get_namehash (); - + dir->__flags = dirent_saw_dot | dirent_saw_dot_dot; res = dir; } } @@ -100,6 +100,7 @@ _off64_t fhandler_virtual::telldir (DIR * dir) void fhandler_virtual::seekdir (DIR * dir, _off64_t loc) { + dir->__flags |= dirent_saw_dot | dirent_saw_dot_dot; dir->__d_position = loc; return; } @@ -108,6 +109,7 @@ void fhandler_virtual::rewinddir (DIR * dir) { dir->__d_position = 0; + dir->__flags |= dirent_saw_dot | dirent_saw_dot_dot; return; } |