From: Eric Biggers Date: Sat, 8 Aug 2015 06:18:14 +0000 (-0500) Subject: Avoid having to check for NTFS-3g 2013.1.13 or later at configure time X-Git-Tag: v1.8.2~16 X-Git-Url: https://wimlib.net/git/?p=wimlib;a=commitdiff_plain;h=56f6607d5ecb59ab50f97c8b99f7fc92b9c67a39 Avoid having to check for NTFS-3g 2013.1.13 or later at configure time --- diff --git a/src/ntfs-3g_apply.c b/src/ntfs-3g_apply.c index ba90fae8..0a3dcaca 100644 --- a/src/ntfs-3g_apply.c +++ b/src/ntfs-3g_apply.c @@ -123,10 +123,7 @@ sid_size(const wimlib_SID *sid) static void * sd_fixup(const void *_desc, size_t *size_p) { - u32 owner_offset, group_offset, dacl_offset; -#if !defined(HAVE_NTFS_MNT_RDONLY) - u32 sacl_offset; -#endif + u32 owner_offset, group_offset, dacl_offset, sacl_offset; bool owner_valid, group_valid; size_t size = *size_p; const wimlib_SECURITY_DESCRIPTOR_RELATIVE *desc = _desc; @@ -142,23 +139,15 @@ sd_fixup(const void *_desc, size_t *size_p) else dacl_offset = 0; -#if !defined(HAVE_NTFS_MNT_RDONLY) if (le16_to_cpu(desc->control) & wimlib_SE_SACL_PRESENT) sacl_offset = le32_to_cpu(desc->sacl_offset); else sacl_offset = 0; -#endif /* Check if the security descriptor will be affected by one of the bugs. - * If not, do nothing and return. - * - * Note: HAVE_NTFS_MNT_RDONLY is defined if libntfs-3g is - * version 2013.1.13 or later. */ - if (!( - #if !defined(HAVE_NTFS_MNT_RDONLY) - (sacl_offset != 0 && sacl_offset == size - sizeof(wimlib_ACL)) || - #endif - (dacl_offset != 0 && dacl_offset == size - sizeof(wimlib_ACL)))) + * If not, do nothing and return. */ + if (!((sacl_offset != 0 && sacl_offset == size - sizeof(wimlib_ACL)) || + (dacl_offset != 0 && dacl_offset == size - sizeof(wimlib_ACL)))) return NULL; owner_offset = le32_to_cpu(desc->owner_offset); diff --git a/src/ntfs-3g_capture.c b/src/ntfs-3g_capture.c index f9825f73..7efed22b 100644 --- a/src/ntfs-3g_capture.c +++ b/src/ntfs-3g_capture.c @@ -48,6 +48,15 @@ #include "wimlib/reparse.h" #include "wimlib/security.h" +/* NTFS-3g 2013 renamed MS_RDONLY to NTFS_MNT_RDONLY. We can't check for the + * existence of NTFS_MNT_RDONLY at compilation time because it's an enum. We + * also can't check for MS_RDONLY being missing because it's also a system + * constant. So check if the NTFS-3g specific MS_IGNORE_HIBERFILE is defined; + * if yes, then we need to use the old MS_RDONLY. */ +#ifdef MS_IGNORE_HIBERFILE +# define NTFS_MNT_RDONLY MS_RDONLY +#endif + /* A reference-counted NTFS volume than is automatically unmounted when the * reference count reaches 0 */ struct ntfs_volume_wrapper { @@ -800,23 +809,7 @@ ntfs_3g_build_dentry_tree(struct wim_dentry **root_ret, if (!volume) return WIMLIB_ERR_NOMEM; - /* NTFS-3g 2013 renamed the "read-only" mount flag from MS_RDONLY to - * NTFS_MNT_RDONLY. - * - * Unfortunately we can't check for defined(NTFS_MNT_RDONLY) because - * NTFS_MNT_RDONLY is an enumerated constant. Also, the NTFS-3g headers - * don't seem to contain any explicit version information. So we have - * to rely on a test done at configure time to detect whether - * NTFS_MNT_RDONLY should be used. */ -#ifdef HAVE_NTFS_MNT_RDONLY - /* NTFS-3g 2013 */ vol = ntfs_mount(device, NTFS_MNT_RDONLY); -#elif defined(MS_RDONLY) - /* NTFS-3g 2011, 2012 */ - vol = ntfs_mount(device, MS_RDONLY); -#else - #error "Can't find NTFS_MNT_RDONLY or MS_RDONLY flags" -#endif if (!vol) { ERROR_WITH_ERRNO("Failed to mount NTFS volume \"%s\" read-only", device);