mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-05-31 03:40:47 +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
d49cafad71
commit
4d9feda044
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>
|
2016-07-13 Fred Kiefer <FredKiefer@gmx.de>
|
||||||
|
|
||||||
* Headers/AppKit/NSDocumentController.h,
|
* Headers/AppKit/NSDocumentController.h,
|
||||||
|
|
|
@ -105,9 +105,15 @@
|
||||||
/* Define to 1 if `f_flags' is a member of `struct statfs'. */
|
/* Define to 1 if `f_flags' is a member of `struct statfs'. */
|
||||||
#undef HAVE_STRUCT_STATFS_F_FLAGS
|
#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'. */
|
/* Define to 1 if `f_flag' is a member of `struct statvfs'. */
|
||||||
#undef HAVE_STRUCT_STATVFS_F_FLAG
|
#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. */
|
/* Define to 1 if you have the <sys/mntent.h> header file. */
|
||||||
#undef HAVE_SYS_MNTENT_H
|
#undef HAVE_SYS_MNTENT_H
|
||||||
|
|
||||||
|
|
|
@ -1213,32 +1213,52 @@ inFileViewerRootedAtPath: (NSString*)rootFullpath
|
||||||
non-standard f_basetype field, which provides the name of the
|
non-standard f_basetype field, which provides the name of the
|
||||||
underlying file system type.
|
underlying file system type.
|
||||||
*/
|
*/
|
||||||
#if !defined(HAVE_STATVFS)
|
|
||||||
#define statvfs statfs
|
|
||||||
#define f_flag f_flags
|
|
||||||
#endif
|
|
||||||
uid_t uid;
|
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))
|
if (statvfs([fullPath fileSystemRepresentation], &m))
|
||||||
return NO;
|
return NO;
|
||||||
|
#elif defined (HAVE_STATFS)
|
||||||
|
#define USING_STATFS 1
|
||||||
|
struct statfs m;
|
||||||
|
if (statfs([fullPath fileSystemRepresentation], &m))
|
||||||
|
return NO;
|
||||||
|
#endif
|
||||||
uid = geteuid();
|
uid = geteuid();
|
||||||
|
|
||||||
*writableFlag = 1;
|
*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;
|
*writableFlag = (m.f_flag & ST_RDONLY) == 0;
|
||||||
#endif
|
#elif defined(HAVE_STRUCT_STATFS_F_FLAGS)
|
||||||
*unmountableFlag = NO;
|
*writableFlag = (m.f_flags & ST_RDONLY) == 0;
|
||||||
|
|
||||||
#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;
|
|
||||||
#endif
|
#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
|
*description = @"filesystem"; // FIXME
|
||||||
|
|
||||||
*fileSystemType = nil;
|
*fileSystemType = nil;
|
||||||
|
@ -2064,8 +2084,12 @@ launchIdentifiers: (NSArray **)identifiers
|
||||||
#elif defined (HAVE_GETMNTINFO)
|
#elif defined (HAVE_GETMNTINFO)
|
||||||
NSFileManager *mgr = [NSFileManager defaultManager];
|
NSFileManager *mgr = [NSFileManager defaultManager];
|
||||||
unsigned int i, n;
|
unsigned int i, n;
|
||||||
|
#if defined(HAVE_STATVFS) && defined (__NetBSD__)
|
||||||
|
struct statvfs *m;
|
||||||
|
#else
|
||||||
struct statfs *m;
|
struct statfs *m;
|
||||||
|
#endif
|
||||||
|
|
||||||
n = getmntinfo(&m, MNT_NOWAIT);
|
n = getmntinfo(&m, MNT_NOWAIT);
|
||||||
names = [NSMutableArray arrayWithCapacity: n];
|
names = [NSMutableArray arrayWithCapacity: n];
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
|
|
35
configure
vendored
35
configure
vendored
|
@ -4103,6 +4103,27 @@ cat >>confdefs.h <<_ACEOF
|
||||||
_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
|
fi
|
||||||
|
|
||||||
ac_fn_c_check_member "$LINENO" "struct statvfs" "f_flag" "ac_cv_member_struct_statvfs_f_flag" "
|
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
|
_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
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -160,7 +160,7 @@ AC_CHECK_FUNCS(statvfs)
|
||||||
AC_CHECK_HEADERS(sys/statvfs.h)
|
AC_CHECK_HEADERS(sys/statvfs.h)
|
||||||
AC_CHECK_HEADERS(sys/vfs.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)
|
#if defined(HAVE_GETMNTINFO)
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/mount.h>
|
#include <sys/mount.h>
|
||||||
|
@ -172,7 +172,7 @@ AC_CHECK_MEMBERS([struct statfs.f_flags],[],[],[
|
||||||
#include <sys/vfs.h>
|
#include <sys/vfs.h>
|
||||||
#endif
|
#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)
|
#if defined (HAVE_SYS_STATVFS_H)
|
||||||
#include <sys/statvfs.h>
|
#include <sys/statvfs.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue