]> wimlib.net Git - wimlib/blobdiff - src/ntfs-3g_capture.c
Avoid having to check for NTFS-3g 2013.1.13 or later at configure time
[wimlib] / src / ntfs-3g_capture.c
index 439d17a61aa98c7931b9b59646427f62aa72ac6d..7efed22b921b91c933df0284d76ea82924d73cc8 100644 (file)
 #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 {
@@ -261,7 +270,6 @@ static int
 scan_ntfs_attr(struct wim_inode *inode,
               ntfs_inode *ni,
               const char *path,
-              size_t path_len,
               struct list_head *unhashed_blobs,
               struct ntfs_volume_wrapper *volume,
               ATTR_TYPES type,
@@ -357,7 +365,6 @@ static int
 scan_ntfs_attrs_with_type(struct wim_inode *inode,
                          ntfs_inode *ni,
                          const char *path,
-                         size_t path_len,
                          struct list_head *unhashed_blobs,
                          struct ntfs_volume_wrapper *volume,
                          ATTR_TYPES type)
@@ -378,7 +385,6 @@ scan_ntfs_attrs_with_type(struct wim_inode *inode,
                ret = scan_ntfs_attr(inode,
                                     ni,
                                     path,
-                                    path_len,
                                     unhashed_blobs,
                                     volume,
                                     type,
@@ -730,7 +736,7 @@ ntfs_3g_build_dentry_tree_recursive(struct wim_dentry **root_ret,
 
        if (attributes & FILE_ATTRIBUTE_REPARSE_POINT) {
                /* Scan the reparse point stream.  */
-               ret = scan_ntfs_attrs_with_type(inode, ni, path, path_len,
+               ret = scan_ntfs_attrs_with_type(inode, ni, path,
                                                params->unhashed_blobs,
                                                volume, AT_REPARSE_POINT);
                if (ret)
@@ -743,8 +749,7 @@ ntfs_3g_build_dentry_tree_recursive(struct wim_dentry **root_ret,
         * may have named data streams.  Nondirectories (including reparse
         * points) can have an unnamed data stream as well as named data
         * streams.  */
-       ret = scan_ntfs_attrs_with_type(inode, ni, path, path_len,
-                                       params->unhashed_blobs,
+       ret = scan_ntfs_attrs_with_type(inode, ni, path, params->unhashed_blobs,
                                        volume, AT_DATA);
        if (ret)
                goto out;
@@ -804,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);