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;
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);
#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 {
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);