(stat): Only root directory passed to GetDriveType. Allow RAM disk as well

as local fixed disk when w32-get-true-file-attributes is set to `local'.
This commit is contained in:
Eli Zaretskii 2008-08-30 10:55:45 +00:00
parent 4c7f3f6818
commit 70d7ae36dd
2 changed files with 19 additions and 1 deletions

View file

@ -1,3 +1,9 @@
2008-08-30 Eli Zaretskii <eliz@gnu.org>
* w32.c (stat): Only root directory passed to GetDriveType. Allow
RAM disk as well as local fixed disk when
w32-get-true-file-attributes is set to `local'.
2008-08-30 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* macterm.c [USE_CG_DRAWING] (mac_draw_cg_image):

View file

@ -2390,6 +2390,8 @@ int
stat (const char * path, struct stat * buf)
{
char *name, *r;
char drive_root[4];
UINT devtype;
WIN32_FIND_DATA wfd;
HANDLE fh;
DWORD fake_inode;
@ -2491,9 +2493,19 @@ stat (const char * path, struct stat * buf)
}
}
/* GetDriveType needs the root directory of NAME's drive. */
if (!(strlen (name) >= 2 && IS_DEVICE_SEP (name[1])))
devtype = GetDriveType (NULL); /* use root of current diectory */
else
{
strncpy (drive_root, name, 3);
drive_root[3] = '\0';
devtype = GetDriveType (drive_root);
}
if (!(NILP (Vw32_get_true_file_attributes)
|| (EQ (Vw32_get_true_file_attributes, Qlocal) &&
GetDriveType (name) != DRIVE_FIXED))
devtype != DRIVE_FIXED && devtype != DRIVE_RAMDISK))
/* No access rights required to get info. */
&& (fh = CreateFile (name, 0, 0, NULL, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS, NULL))