]> wimlib.net Git - wimlib/blobdiff - src/ntfs-3g_capture.c
Nonrecursive for_dentry_child()
[wimlib] / src / ntfs-3g_capture.c
index 03c3282db1e830f20dcf14b8364c6333cdde5f18..a0b370998e939bd4ca640284b1e6ae2c077f6698 100644 (file)
@@ -155,14 +155,13 @@ out:
 
 }
 
-/* Load the streams from a file or reparse point in the NTFS volume into the WIM
- * lookup table */
+/* Load the streams from a file or reparse point in the NTFS volume  */
 static int
 capture_ntfs_streams(struct wim_inode *inode,
                     ntfs_inode *ni,
                     char *path,
                     size_t path_len,
-                    struct wim_lookup_table *lookup_table,
+                    struct list_head *unhashed_streams,
                     ntfs_volume *vol,
                     ATTR_TYPES type)
 {
@@ -274,8 +273,8 @@ capture_ntfs_streams(struct wim_inode *inode,
                        new_ads_entry->lte = lte;
                }
                if (lte) {
-                       lookup_table_insert_unhashed(lookup_table, lte,
-                                                    inode, stream_id);
+                       add_unhashed_stream(lte, inode,
+                                           stream_id, unhashed_streams);
                }
        }
        if (errno == ENOENT) {
@@ -387,9 +386,8 @@ lookup_dos_name(const struct dos_name_map *map, u64 ntfs_ino)
 }
 
 static int
-set_dentry_dos_name(struct wim_dentry *dentry, void *arg)
+set_dentry_dos_name(struct wim_dentry *dentry, const struct dos_name_map *map)
 {
-       const struct dos_name_map *map = arg;
        const struct dos_name_node *node;
 
        if (dentry->is_win32_name) {
@@ -535,7 +533,7 @@ build_dentry_tree_ntfs_recursive(struct wim_dentry **root_ret,
        le32 attributes;
        int ret;
        struct wim_dentry *root = NULL;
-       struct wim_inode *inode;
+       struct wim_inode *inode = NULL;
        ATTR_TYPES stream_type;
 
        if (exclude_path(path, path_len, params->config, false)) {
@@ -605,7 +603,7 @@ build_dentry_tree_ntfs_recursive(struct wim_dentry **root_ret,
         * - Reparse points: capture reparse data only
         */
        ret = capture_ntfs_streams(inode, ni, path, path_len,
-                                  params->lookup_table, vol, stream_type);
+                                  params->unhashed_streams, vol, stream_type);
        if (ret)
                goto out;
 
@@ -627,8 +625,14 @@ build_dentry_tree_ntfs_recursive(struct wim_dentry **root_ret,
                        ERROR_WITH_ERRNO("Error reading directory \"%s\"", path);
                        ret = WIMLIB_ERR_NTFS_3G;
                } else {
-                       ret = for_dentry_child(root, set_dentry_dos_name,
-                                              &dos_name_map);
+                       struct wim_dentry *child;
+
+                       ret = 0;
+                       for_dentry_child(child, root) {
+                               ret = set_dentry_dos_name(child, &dos_name_map);
+                               if (ret)
+                                       break;
+                       }
                }
                destroy_dos_name_map(&dos_name_map);
                if (ret)