aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2005-03-16 21:20:56 +0000
committerChristopher Faylor <me@cgf.cx>2005-03-16 21:20:56 +0000
commit2693c1ac5651248b79c3a7805615b043a901ae6f (patch)
tree9baedb56d5c51dd988be04ed51023e74ccbc1679
parent80e4c577b6ada0d6b64bf139075c2f9983608bc8 (diff)
downloadnewlib-2693c1ac5651248b79c3a7805615b043a901ae6f.zip
newlib-2693c1ac5651248b79c3a7805615b043a901ae6f.tar.gz
newlib-2693c1ac5651248b79c3a7805615b043a901ae6f.tar.bz2
* 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.
-rw-r--r--winsup/cygwin/ChangeLog16
-rw-r--r--winsup/cygwin/dir.cc20
-rw-r--r--winsup/cygwin/fhandler.h8
-rw-r--r--winsup/cygwin/fhandler_registry.cc1
-rw-r--r--winsup/cygwin/fhandler_virtual.cc4
5 files changed, 34 insertions, 15 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 296b0f5..b92fedb 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 e74498f..5aabcd3 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 bdc8d3b..2d5998b 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 ad6d638..383643b 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 2179899..32d700a 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;
}