* fhandler.h (fhandler_cygdrive:DRVSZ): New enum.

(pdrive_buf): New place to hold information about cygdrive.
* fhandler_disk_file.cc (fhandler_cygdrive::set_drives): Store drive info in
pdrive_buf since get_win32_name() could now be too small to hold everything.
(fhandler_cygdrive::rewinddir): Reset pdrive to pdrive_buf.
(fhandler_cygdrive::closedir): Ditto.
* pipe.cc (fhandler_pipe::init): Be more defensive when referencing
get_win32_name().  Rework logic which made a copy of the POSIX path and then
never used it.
This commit is contained in:
Christopher Faylor
2009-08-04 04:20:36 +00:00
parent ff7b364c12
commit 824d851859
8 changed files with 35 additions and 18 deletions

View File

@@ -2123,14 +2123,11 @@ fhandler_cygdrive::close ()
return 0;
}
#define DRVSZ sizeof ("x:\\")
void
fhandler_cygdrive::set_drives ()
{
const int len = 2 + 26 * DRVSZ;
char *p = const_cast<char *> (get_win32_name ());
pdrive = p;
ndrives = GetLogicalDriveStrings (len, p) / DRVSZ;
pdrive = pdrive_buf;
ndrives = GetLogicalDriveStrings (sizeof pdrive_buf, pdrive_buf) / DRVSZ;
}
int
@@ -2146,7 +2143,7 @@ fhandler_cygdrive::fstat (struct __stat64 *buf)
for (const char *p = pdrive; p && *p; p = strchr (p, '\0') + 1)
if (is_floppy ((flptst[0] = *p, flptst))
|| GetFileAttributes (p) == INVALID_FILE_ATTRIBUTES)
--n;
n--;
buf->st_nlink = n + 2;
return 0;
}
@@ -2198,13 +2195,13 @@ fhandler_cygdrive::readdir (DIR *dir, dirent *de)
void
fhandler_cygdrive::rewinddir (DIR *dir)
{
pdrive = get_win32_name ();
pdrive = pdrive_buf;
dir->__d_position = 0;
}
int
fhandler_cygdrive::closedir (DIR *dir)
{
pdrive = get_win32_name ();
pdrive = pdrive_buf;
return 0;
}