* 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.
This commit is contained in:
Christopher Faylor 2005-03-16 21:20:56 +00:00
parent 80e4c577b6
commit 2693c1ac56
5 changed files with 34 additions and 15 deletions

View File

@ -1,3 +1,19 @@
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.

View File

@ -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, '\\')))

View File

@ -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,

View File

@ -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;
}

View File

@ -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;
}