mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-04-24 18:31:20 +00:00
Check explicitely for f_owner and use f_owner and f_flag if checked
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@39991 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
ece9e1c763
commit
cc3188997b
5 changed files with 91 additions and 19 deletions
|
@ -1,3 +1,10 @@
|
|||
2016-07-13 Riccardo Mottola <rm@gnu.org>
|
||||
|
||||
* 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 <FredKiefer@gmx.de>
|
||||
|
||||
* Headers/AppKit/NSDocumentController.h,
|
||||
|
|
|
@ -105,9 +105,15 @@
|
|||
/* 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
|
||||
|
||||
|
|
|
@ -1213,32 +1213,52 @@ inFileViewerRootedAtPath: (NSString*)rootFullpath
|
|||
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;
|
||||
struct statvfs m;
|
||||
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;
|
||||
#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;
|
||||
#elif defined(HAVE_STRUCT_STATFS_F_FLAGS)
|
||||
*writableFlag = (m.f_flags & ST_RDONLY) == 0;
|
||||
#endif
|
||||
|
||||
|
||||
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 @@ launchIdentifiers: (NSArray **)identifiers
|
|||
#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++)
|
||||
|
|
35
configure
vendored
35
configure
vendored
|
@ -4103,6 +4103,27 @@ cat >>confdefs.h <<_ACEOF
|
|||
_ACEOF
|
||||
|
||||
|
||||
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" "
|
||||
|
@ -4118,6 +4139,20 @@ cat >>confdefs.h <<_ACEOF
|
|||
_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
|
||||
|
||||
|
||||
fi
|
||||
|
||||
|
||||
|
|
|
@ -160,7 +160,7 @@ AC_CHECK_FUNCS(statvfs)
|
|||
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 @@ AC_CHECK_MEMBERS([struct statfs.f_flags],[],[],[
|
|||
#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
|
||||
|
|
Loading…
Reference in a new issue