aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii2008-08-15 13:54:14 +0000
committerEli Zaretskii2008-08-15 13:54:14 +0000
commita644b2e42cf86022603ecfa15c59a637f311a95d (patch)
tree599191c90f533e9b63e66860fba18829babbc805 /src
parentb8526f6ea42d5c51070f4ddddcecc44e15022995 (diff)
downloademacs-a644b2e42cf86022603ecfa15c59a637f311a95d.tar.gz
emacs-a644b2e42cf86022603ecfa15c59a637f311a95d.zip
(stat): Only root directory passed to GetDriveType.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog3
-rw-r--r--src/w32.c16
2 files changed, 17 insertions, 2 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 1576266855e..2af33df079b 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -3,6 +3,9 @@
3 * w32.c (_MEMORY_STATUS_EX, MEMORY_STATUS_EX, LPMEMORY_STATUS_EX): 3 * w32.c (_MEMORY_STATUS_EX, MEMORY_STATUS_EX, LPMEMORY_STATUS_EX):
4 Rename from _MEMORYSTATUSEX, MEMORYSTATUSEX, LPMEMORYSTATUSEX. 4 Rename from _MEMORYSTATUSEX, MEMORYSTATUSEX, LPMEMORYSTATUSEX.
5 All users changed. 5 All users changed.
6 (stat): Only root directory passed to GetDriveType. Allow RAM
7 disk as well as local fixed disk when w32-get-true-file-attributes
8 is set to `local'.
6 9
72008-08-14 Lawrence Mitchell <wence@gmx.li> 102008-08-14 Lawrence Mitchell <wence@gmx.li>
8 11
diff --git a/src/w32.c b/src/w32.c
index cf4bd7bec71..ddb48981c58 100644
--- a/src/w32.c
+++ b/src/w32.c
@@ -2879,6 +2879,8 @@ int
2879stat (const char * path, struct stat * buf) 2879stat (const char * path, struct stat * buf)
2880{ 2880{
2881 char *name, *r; 2881 char *name, *r;
2882 char drive_root[4];
2883 UINT devtype;
2882 WIN32_FIND_DATA wfd; 2884 WIN32_FIND_DATA wfd;
2883 HANDLE fh; 2885 HANDLE fh;
2884 unsigned __int64 fake_inode; 2886 unsigned __int64 fake_inode;
@@ -2983,9 +2985,19 @@ stat (const char * path, struct stat * buf)
2983 } 2985 }
2984 } 2986 }
2985 2987
2988 /* GetDriveType needs the root directory of NAME's drive. */
2989 if (!(strlen (name) >= 2 && IS_DEVICE_SEP (name[1])))
2990 devtype = GetDriveType (NULL); /* use root of current diectory */
2991 else
2992 {
2993 strncpy (drive_root, name, 3);
2994 drive_root[3] = '\0';
2995 devtype = GetDriveType (drive_root);
2996 }
2997
2986 if (!(NILP (Vw32_get_true_file_attributes) 2998 if (!(NILP (Vw32_get_true_file_attributes)
2987 || (EQ (Vw32_get_true_file_attributes, Qlocal) && 2999 || (EQ (Vw32_get_true_file_attributes, Qlocal)
2988 GetDriveType (name) != DRIVE_FIXED)) 3000 && devtype != DRIVE_FIXED && devtype != DRIVE_RAMDISK))
2989 /* No access rights required to get info. */ 3001 /* No access rights required to get info. */
2990 && (fh = CreateFile (name, 0, 0, NULL, OPEN_EXISTING, 3002 && (fh = CreateFile (name, 0, 0, NULL, OPEN_EXISTING,
2991 FILE_FLAG_BACKUP_SEMANTICS, NULL)) 3003 FILE_FLAG_BACKUP_SEMANTICS, NULL))