]> wimlib.net Git - wimlib/blobdiff - src/extract.c
tree-cmp without xattr
[wimlib] / src / extract.c
index 2f7a5d838f9dbcea3099e281b213667b84811b12..054984920de7188ea688dd3d075aadafaff3d62a 100644 (file)
@@ -48,7 +48,7 @@
 /* Internal */
 #define WIMLIB_EXTRACT_FLAG_MULTI_IMAGE 0x80000000
 
-static int extract_regular_file_linked(const struct dentry *dentry, 
+static int extract_regular_file_linked(const struct dentry *dentry,
                                       const char *output_dir,
                                       const char *output_path,
                                       int extract_flags,
@@ -77,7 +77,7 @@ static int extract_regular_file_linked(const struct dentry *dentry,
 
                wimlib_assert(extract_flags & WIMLIB_EXTRACT_FLAG_SYMLINK);
 
-               num_path_components = 
+               num_path_components =
                        get_num_path_components(dentry->full_path_utf8) - 1;
                num_output_dir_path_components =
                        get_num_path_components(output_dir);
@@ -114,7 +114,7 @@ static int extract_regular_file_linked(const struct dentry *dentry,
 }
 
 static int extract_regular_file_unlinked(WIMStruct *w,
-                                        struct dentry *dentry, 
+                                        struct dentry *dentry,
                                         const char *output_path,
                                         int extract_flags,
                                         struct lookup_table_entry *lte)
@@ -188,11 +188,11 @@ out:
        return ret;
 }
 
-/* 
- * Extracts a regular file from the WIM archive. 
+/*
+ * Extracts a regular file from the WIM archive.
  */
-static int extract_regular_file(WIMStruct *w, 
-                               struct dentry *dentry, 
+static int extract_regular_file(WIMStruct *w,
+                               struct dentry *dentry,
                                const char *output_dir,
                                const char *output_path,
                                int extract_flags)
@@ -239,12 +239,12 @@ static int extract_symlink(const struct dentry *dentry, const char *output_path,
        return 0;
 }
 
-/* 
- * Extracts a directory from the WIM archive. 
+/*
+ * Extracts a directory from the WIM archive.
  *
  * @dentry:            The directory entry for the directory.
  * @output_path:       The path to which the directory is to be extracted to.
- * @return:            True on success, false on failure. 
+ * @return:            True on success, false on failure.
  */
 static int extract_directory(const char *output_path, bool is_root)
 {
@@ -280,9 +280,10 @@ struct extract_args {
        WIMStruct *w;
        int extract_flags;
        const char *output_dir;
+       unsigned num_lutimes_warnings;
 };
 
-/* 
+/*
  * Extracts a file, directory, or symbolic link from the WIM archive.  For use
  * in for_dentry_in_tree().
  */
@@ -327,8 +328,11 @@ static int apply_dentry_timestamps(struct dentry *dentry, void *arg)
        wim_timestamp_to_timeval(dentry->d_inode->last_access_time, &tv[0]);
        wim_timestamp_to_timeval(dentry->d_inode->last_write_time, &tv[1]);
        if (lutimes(output_path, tv) != 0) {
-               WARNING("Failed to set timestamp on file `%s': %s",
-                       output_path, strerror(errno));
+               if (errno != ENOSYS || args->num_lutimes_warnings < 10) {
+                       WARNING("Failed to set timestamp on file `%s': %s",
+                               output_path, strerror(errno));
+                       args->num_lutimes_warnings++;
+               }
        }
        return 0;
 }
@@ -340,14 +344,15 @@ static int extract_single_image(WIMStruct *w, int image,
        DEBUG("Extracting image %d", image);
 
        int ret;
-       ret = wimlib_select_image(w, image);
+       ret = select_wim_image(w, image);
        if (ret != 0)
                return ret;
 
        struct extract_args args = {
-               .w = w,
-               .extract_flags = extract_flags,
-               .output_dir = output_dir,
+               .w                    = w,
+               .extract_flags        = extract_flags,
+               .output_dir           = output_dir,
+               .num_lutimes_warnings = 0,
        };
 
        ret = for_dentry_in_tree(wim_root_dentry(w), extract_dentry, &args);
@@ -381,7 +386,7 @@ static int extract_all_images(WIMStruct *w, const char *output_dir,
        memcpy(buf, output_dir, output_path_len);
        buf[output_path_len] = '/';
        for (image = 1; image <= w->hdr.image_count; image++) {
-               
+
                image_name = wimlib_get_image_name(w, image);
                if (*image_name) {
                        strcpy(buf + output_path_len + 1, image_name);