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