* 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>
|
||||
|
||||
* Makefile.in (DLL_OFILES): Add getopt.o and iruserok.o.
|
||||
|
|
|
@ -129,12 +129,14 @@ readdir (DIR *dir)
|
|||
res = dir->__d_dirent;
|
||||
strcpy (res->d_name, ".");
|
||||
dir->__flags |= opendir_saw_dot;
|
||||
dir->__d_position++;
|
||||
}
|
||||
else if (!(dir->__flags & opendir_saw_dot_dot))
|
||||
{
|
||||
res = dir->__d_dirent;
|
||||
strcpy (res->d_name, "..");
|
||||
dir->__flags |= opendir_saw_dot_dot;
|
||||
dir->__d_position++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -48,14 +48,18 @@ num_entries (const char *win32_name)
|
|||
|
||||
if (handle == INVALID_HANDLE_VALUE)
|
||||
return 2; /* 2 is the minimum number of links to a dir, so... */
|
||||
count ++;
|
||||
int saw_dot = 2;
|
||||
while (FindNextFileA (handle, &buf))
|
||||
{
|
||||
if ((buf.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
|
||||
if (buf.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
||||
count++;
|
||||
if (buf.cFileName[0] == '.'
|
||||
&& (buf.cFileName[1] == '\0'
|
||||
|| (buf.cFileName[1] == '.' && buf.cFileName[2] == '\0')))
|
||||
saw_dot--;
|
||||
}
|
||||
FindClose (handle);
|
||||
return count;
|
||||
return count + saw_dot;
|
||||
}
|
||||
|
||||
int __stdcall
|
||||
|
@ -743,7 +747,7 @@ fhandler_cygdrive::fstat (struct __stat64 *buf, path_conv *pc)
|
|||
buf->st_mode = S_IFDIR | 0555;
|
||||
if (!ndrives)
|
||||
set_drives ();
|
||||
buf->st_nlink = ndrives;
|
||||
buf->st_nlink = ndrives + 2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -766,19 +770,14 @@ fhandler_cygdrive::readdir (DIR *dir)
|
|||
return fhandler_disk_file::readdir (dir);
|
||||
if (!pdrive || !*pdrive)
|
||||
return NULL;
|
||||
else if (dir->__d_position > 1
|
||||
&& GetFileAttributes (pdrive) == INVALID_FILE_ATTRIBUTES)
|
||||
if (GetFileAttributes (pdrive) == INVALID_FILE_ATTRIBUTES)
|
||||
{
|
||||
pdrive = strchr (pdrive, '\0') + 1;
|
||||
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[1] = '\0';
|
||||
}
|
||||
dir->__d_position++;
|
||||
pdrive = strchr (pdrive, '\0') + 1;
|
||||
syscall_printf ("%p = readdir (%p) (%s)", &dir->__d_dirent, dir,
|
||||
|
|
Loading…
Reference in New Issue