]> git.eshelyaron.com Git - emacs.git/commitdiff
Make 'fstat' on MS-Windows behave more like 'stat' and 'lstat'.
authorEli Zaretskii <eliz@gnu.org>
Sat, 19 Jan 2013 07:32:36 +0000 (09:32 +0200)
committerEli Zaretskii <eliz@gnu.org>
Sat, 19 Jan 2013 07:32:36 +0000 (09:32 +0200)
 src/w32.c (fstat): Return owner and group like 'stat' and 'lstat' do.

src/ChangeLog
src/w32.c

index 267738787539a5d340c8dd866d79a266ae149dab..3727e13d580c444cd83253511d719e6a24036d4e 100644 (file)
@@ -3,6 +3,7 @@
        * w32.c (acl_set_file): Treat ERROR_ACCESS_DENIED from
        set_file_security as failure due to insufficient privileges.
        Reported by Fabrice Popineau <fabrice.popineau@supelec.fr>.
+       (fstat): Return owner and group like 'stat' and 'lstat' do.
 
 2013-01-19  Paul Eggert  <eggert@cs.ucla.edu>
 
index 525b0a8e89b822dcc487c8b66552c6448247731b..be58dc5cd53efb6f8c2d405ed402417664fbd88b 100644 (file)
--- a/src/w32.c
+++ b/src/w32.c
@@ -4164,13 +4164,23 @@ fstat (int desc, struct stat * buf)
   else
     buf->st_ino = fake_inode;
 
-  /* Consider files to belong to current user.
-     FIXME: this should use GetSecurityInfo API, but it is only
-     available for _WIN32_WINNT >= 0x501.  */
-  buf->st_uid = dflt_passwd.pw_uid;
-  buf->st_gid = dflt_passwd.pw_gid;
-  strcpy (buf->st_uname, dflt_passwd.pw_name);
-  strcpy (buf->st_gname, dflt_group.gr_name);
+  /* If the caller so requested, get the true file owner and group.
+     Otherwise, consider the file to belong to the current user.  */
+  if (!w32_stat_get_owner_group || is_windows_9x () == TRUE)
+    get_file_owner_and_group (NULL, buf);
+  else
+    {
+      PSECURITY_DESCRIPTOR psd = NULL;
+
+      psd = get_file_security_desc_by_handle (fh);
+      if (psd)
+       {
+         get_file_owner_and_group (psd, buf);
+         LocalFree (psd);
+       }
+      else
+       get_file_owner_and_group (NULL, buf);
+    }
 
   buf->st_dev = info.dwVolumeSerialNumber;
   buf->st_rdev = info.dwVolumeSerialNumber;