* fhandler_disk_file.cc (num_entries): Take . and .. into account if they do
not exist since cygwin simulates them. (fhandler_cygdrive::fstat): Ditto. (fhandler_cygdrive::readdir): Don't do any specific tests on __d_position when seeing if a drive exists.
This commit is contained in:
parent
932a40e86b
commit
1aa76ad568
|
@ -1,3 +1,11 @@
|
||||||
|
2003-09-10 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
|
* fhandler_disk_file.cc (num_entries): Take . and .. into account if
|
||||||
|
they do not exist since cygwin simulates them.
|
||||||
|
(fhandler_cygdrive::fstat): Ditto.
|
||||||
|
(fhandler_cygdrive::readdir): Don't do any specific tests on
|
||||||
|
__d_position when seeing if a drive exists.
|
||||||
|
|
||||||
2003-09-10 Corinna Vinschen <corinna@vinschen.de>
|
2003-09-10 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* Makefile.in (DLL_OFILES): Add getopt.o and iruserok.o.
|
* Makefile.in (DLL_OFILES): Add getopt.o and iruserok.o.
|
||||||
|
|
|
@ -129,12 +129,14 @@ readdir (DIR *dir)
|
||||||
res = dir->__d_dirent;
|
res = dir->__d_dirent;
|
||||||
strcpy (res->d_name, ".");
|
strcpy (res->d_name, ".");
|
||||||
dir->__flags |= opendir_saw_dot;
|
dir->__flags |= opendir_saw_dot;
|
||||||
|
dir->__d_position++;
|
||||||
}
|
}
|
||||||
else if (!(dir->__flags & opendir_saw_dot_dot))
|
else if (!(dir->__flags & opendir_saw_dot_dot))
|
||||||
{
|
{
|
||||||
res = dir->__d_dirent;
|
res = dir->__d_dirent;
|
||||||
strcpy (res->d_name, "..");
|
strcpy (res->d_name, "..");
|
||||||
dir->__flags |= opendir_saw_dot_dot;
|
dir->__flags |= opendir_saw_dot_dot;
|
||||||
|
dir->__d_position++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,14 +48,18 @@ num_entries (const char *win32_name)
|
||||||
|
|
||||||
if (handle == INVALID_HANDLE_VALUE)
|
if (handle == INVALID_HANDLE_VALUE)
|
||||||
return 2; /* 2 is the minimum number of links to a dir, so... */
|
return 2; /* 2 is the minimum number of links to a dir, so... */
|
||||||
count ++;
|
int saw_dot = 2;
|
||||||
while (FindNextFileA (handle, &buf))
|
while (FindNextFileA (handle, &buf))
|
||||||
{
|
{
|
||||||
if ((buf.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
|
if (buf.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
||||||
count ++;
|
count++;
|
||||||
|
if (buf.cFileName[0] == '.'
|
||||||
|
&& (buf.cFileName[1] == '\0'
|
||||||
|
|| (buf.cFileName[1] == '.' && buf.cFileName[2] == '\0')))
|
||||||
|
saw_dot--;
|
||||||
}
|
}
|
||||||
FindClose (handle);
|
FindClose (handle);
|
||||||
return count;
|
return count + saw_dot;
|
||||||
}
|
}
|
||||||
|
|
||||||
int __stdcall
|
int __stdcall
|
||||||
|
@ -743,7 +747,7 @@ fhandler_cygdrive::fstat (struct __stat64 *buf, path_conv *pc)
|
||||||
buf->st_mode = S_IFDIR | 0555;
|
buf->st_mode = S_IFDIR | 0555;
|
||||||
if (!ndrives)
|
if (!ndrives)
|
||||||
set_drives ();
|
set_drives ();
|
||||||
buf->st_nlink = ndrives;
|
buf->st_nlink = ndrives + 2;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -766,19 +770,14 @@ fhandler_cygdrive::readdir (DIR *dir)
|
||||||
return fhandler_disk_file::readdir (dir);
|
return fhandler_disk_file::readdir (dir);
|
||||||
if (!pdrive || !*pdrive)
|
if (!pdrive || !*pdrive)
|
||||||
return NULL;
|
return NULL;
|
||||||
else if (dir->__d_position > 1
|
if (GetFileAttributes (pdrive) == INVALID_FILE_ATTRIBUTES)
|
||||||
&& GetFileAttributes (pdrive) == INVALID_FILE_ATTRIBUTES)
|
|
||||||
{
|
{
|
||||||
pdrive = strchr (pdrive, '\0') + 1;
|
pdrive = strchr (pdrive, '\0') + 1;
|
||||||
return readdir (dir);
|
return readdir (dir);
|
||||||
}
|
}
|
||||||
else if (*pdrive == '.')
|
|
||||||
strcpy (dir->__d_dirent->d_name, pdrive);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
*dir->__d_dirent->d_name = cyg_tolower (*pdrive);
|
*dir->__d_dirent->d_name = cyg_tolower (*pdrive);
|
||||||
dir->__d_dirent->d_name[1] = '\0';
|
dir->__d_dirent->d_name[1] = '\0';
|
||||||
}
|
|
||||||
dir->__d_position++;
|
dir->__d_position++;
|
||||||
pdrive = strchr (pdrive, '\0') + 1;
|
pdrive = strchr (pdrive, '\0') + 1;
|
||||||
syscall_printf ("%p = readdir (%p) (%s)", &dir->__d_dirent, dir,
|
syscall_printf ("%p = readdir (%p) (%s)", &dir->__d_dirent, dir,
|
||||||
|
|
Loading…
Reference in New Issue