* 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:
parent
80e4c577b6
commit
2693c1ac56
|
@ -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.
|
||||
|
|
|
@ -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, '\\')))
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue