Author: rmottola
Date: Wed Jul 13 01:27:31 2016
New Revision: 39991

URL: http://svn.gna.org/viewcvs/gnustep?rev=39991&view=rev
Log:
Check explicitely for f_owner and use f_owner and f_flag if checked

Modified:
    libs/gui/trunk/ChangeLog
    libs/gui/trunk/Headers/Additions/GNUstepGUI/config.h.in
    libs/gui/trunk/Source/NSWorkspace.m
    libs/gui/trunk/configure
    libs/gui/trunk/configure.ac

Modified: libs/gui/trunk/ChangeLog
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/gui/trunk/ChangeLog?rev=39991&r1=39990&r2=39991&view=diff
==============================================================================
--- libs/gui/trunk/ChangeLog    (original)
+++ libs/gui/trunk/ChangeLog    Wed Jul 13 01:27:31 2016
@@ -1,3 +1,10 @@
+2016-07-13 Riccardo Mottola <[email protected]>
+
+       * Source/NSWorkspace.m
+       * Headers/Additions/GNUstepGUI/config.h.in
+       * configure.ac
+       Check explicitely for f_owner and use f_owner and f_flag if checked.
+
 2016-07-13 Fred Kiefer <[email protected]>
 
        * Headers/AppKit/NSDocumentController.h,

Modified: libs/gui/trunk/Headers/Additions/GNUstepGUI/config.h.in
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/gui/trunk/Headers/Additions/GNUstepGUI/config.h.in?rev=39991&r1=39990&r2=39991&view=diff
==============================================================================
--- libs/gui/trunk/Headers/Additions/GNUstepGUI/config.h.in     (original)
+++ libs/gui/trunk/Headers/Additions/GNUstepGUI/config.h.in     Wed Jul 13 
01:27:31 2016
@@ -105,8 +105,14 @@
 /* Define to 1 if `f_flags' is a member of `struct statfs'. */
 #undef HAVE_STRUCT_STATFS_F_FLAGS
 
+/* Define to 1 if `f_owner' is a member of `struct statfs'. */
+#undef HAVE_STRUCT_STATFS_F_OWNER
+
 /* Define to 1 if `f_flag' is a member of `struct statvfs'. */
 #undef HAVE_STRUCT_STATVFS_F_FLAG
+
+/* Define to 1 if `f_owner' is a member of `struct statvfs'. */
+#undef HAVE_STRUCT_STATVFS_F_OWNER
 
 /* Define to 1 if you have the <sys/mntent.h> header file. */
 #undef HAVE_SYS_MNTENT_H

Modified: libs/gui/trunk/Source/NSWorkspace.m
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/gui/trunk/Source/NSWorkspace.m?rev=39991&r1=39990&r2=39991&view=diff
==============================================================================
--- libs/gui/trunk/Source/NSWorkspace.m (original)
+++ libs/gui/trunk/Source/NSWorkspace.m Wed Jul 13 01:27:31 2016
@@ -1213,32 +1213,52 @@
      non-standard f_basetype field, which provides the name of the
      underlying file system type.
   */
-#if !defined(HAVE_STATVFS)
-#define statvfs statfs
-#define f_flag f_flags
-#endif
   uid_t uid;
+  BOOL isRootFS;
+  BOOL hasOwnership;
+
+#if defined(HAVE_STATVFS)
+  #define USING_STATVFS 1
   struct statvfs m;
-
   if (statvfs([fullPath fileSystemRepresentation], &m))
     return NO;
-
+#elif defined (HAVE_STATFS)
+  #define USING_STATFS 1
+  struct statfs m;
+  if (statfs([fullPath fileSystemRepresentation], &m))
+    return NO;  
+#endif
   uid = geteuid();
 
   *writableFlag = 1;
-#if defined(HAVE_STRUCT_STATFS_F_FLAGS) || defined(HAVE_STRUCT_STATVFS_F_FLAG)
+#if  defined(HAVE_STRUCT_STATVFS_F_FLAG)
   *writableFlag = (m.f_flag & ST_RDONLY) == 0;
+#elif defined(HAVE_STRUCT_STATFS_F_FLAGS)
+  *writableFlag = (m.f_flags & ST_RDONLY) == 0;
 #endif
-  *unmountableFlag = NO;
-
-#if defined(ST_ROOTFS) // new NetBSD
-  *unmountableFlag =
-    (m.f_flag & ST_ROOTFS) == 0 && (uid == 0 || uid == m.f_owner);
-#elif defined (MNT_ROOTFS) // FreeBSD
-  *unmountableFlag =
-    (m.f_flag & MNT_ROOTFS) == 0;
+
+
+  isRootFS = NO;
+#if defined(ST_ROOTFS)
+  isRootFS = (m.f_flag & ST_ROOTFS);
+#elif defined (MNT_ROOTFS)
+  isRootFS = (m.f_flag & MNT_ROOTFS);
 #endif
 
+  hasOwnership = NO;
+#if (defined(USING_STATFS) && defined(HAVE_STRUCT_STATFS_F_OWNER)) || 
(defined(USING_STATVFS) &&  defined(HAVE_STRUCT_STATVFS_F_OWNER))
+  if (uid == 0 || uid == m.f_owner)
+    hasOwnership = YES;
+#elif (defined(USING_STATVFS) && !defined(USING_STATFS) && defined 
(HAVE_STATFS) && defined(HAVE_STRUCT_STATFS_F_OWNER))
+  // FreeBSD only?
+  struct statfs m2;
+  statfs([fullPath fileSystemRepresentation], &m2);
+  if (uid == 0 || uid == m2.f_owner)
+    hasOwnership = YES;
+#endif
+  
+  *unmountableFlag = !isRootFS && hasOwnership;
+  
   *description = @"filesystem"; // FIXME
 
   *fileSystemType = nil;
@@ -2064,8 +2084,12 @@
 #elif defined (HAVE_GETMNTINFO)
   NSFileManager        *mgr = [NSFileManager defaultManager];
   unsigned int i, n;
+#if defined(HAVE_STATVFS) && defined (__NetBSD__)
+  struct statvfs *m;
+#else
   struct statfs        *m;
-
+#endif
+  
   n = getmntinfo(&m, MNT_NOWAIT);
   names = [NSMutableArray arrayWithCapacity: n];
   for (i = 0; i < n; i++)

Modified: libs/gui/trunk/configure
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/gui/trunk/configure?rev=39991&r1=39990&r2=39991&view=diff
==============================================================================
--- libs/gui/trunk/configure    (original)
+++ libs/gui/trunk/configure    Wed Jul 13 01:27:31 2016
@@ -4104,6 +4104,27 @@
 
 
 fi
+ac_fn_c_check_member "$LINENO" "struct statfs" "f_owner" 
"ac_cv_member_struct_statfs_f_owner" "
+#if    defined(HAVE_GETMNTINFO)
+#include <sys/param.h>
+#include <sys/mount.h>
+#endif
+#if defined (HAVE_SYS_STATVFS_H)
+#include <sys/statvfs.h>
+#endif
+#if defined (HAVE_SYS_VFS_H)
+#include <sys/vfs.h>
+#endif
+
+"
+if test "x$ac_cv_member_struct_statfs_f_owner" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STATFS_F_OWNER 1
+_ACEOF
+
+
+fi
 
 ac_fn_c_check_member "$LINENO" "struct statvfs" "f_flag" 
"ac_cv_member_struct_statvfs_f_flag" "
 #if defined (HAVE_SYS_STATVFS_H)
@@ -4115,6 +4136,20 @@
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_STATVFS_F_FLAG 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct statvfs" "f_owner" 
"ac_cv_member_struct_statvfs_f_owner" "
+#if defined (HAVE_SYS_STATVFS_H)
+#include <sys/statvfs.h>
+#endif
+
+"
+if test "x$ac_cv_member_struct_statvfs_f_owner" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STATVFS_F_OWNER 1
 _ACEOF
 
 

Modified: libs/gui/trunk/configure.ac
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/gui/trunk/configure.ac?rev=39991&r1=39990&r2=39991&view=diff
==============================================================================
--- libs/gui/trunk/configure.ac (original)
+++ libs/gui/trunk/configure.ac Wed Jul 13 01:27:31 2016
@@ -160,7 +160,7 @@
 AC_CHECK_HEADERS(sys/statvfs.h)
 AC_CHECK_HEADERS(sys/vfs.h)
 
-AC_CHECK_MEMBERS([struct statfs.f_flags],[],[],[
+AC_CHECK_MEMBERS([struct statfs.f_flags, struct statfs.f_owner],[],[],[
 #if    defined(HAVE_GETMNTINFO)
 #include <sys/param.h>
 #include <sys/mount.h>
@@ -172,7 +172,7 @@
 #include <sys/vfs.h>
 #endif
 ])
-AC_CHECK_MEMBERS([struct statvfs.f_flag],[],[],[
+AC_CHECK_MEMBERS([struct statvfs.f_flag, struct statvfs.f_owner],[],[],[
 #if defined (HAVE_SYS_STATVFS_H)
 #include <sys/statvfs.h>
 #endif


_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs

Reply via email to