}
}
-static void
+static void
destroy_dos_name_map(struct dos_name_map *map)
{
free_dos_name_tree(map->rb_root.rb_node);
};
static int
-build_dentry_tree_ntfs_recursive(struct wim_dentry **root_p, ntfs_inode *dir_ni,
- ntfs_inode *ni, char path[], size_t path_len,
+build_dentry_tree_ntfs_recursive(struct wim_dentry **root_p,
+ ntfs_inode *dir_ni,
+ ntfs_inode *ni,
+ mbchar *path,
+ size_t path_len,
int name_type,
struct wim_lookup_table *lookup_table,
struct sd_set *sd_set,
{
struct readdir_ctx *ctx;
size_t mbs_name_nbytes;
- char *mbs_name;
+ mbchar *mbs_name;
struct wim_dentry *child;
int ret;
size_t path_len;
/* Return now if an error occurred or if this is just a DOS name
* and not a Win32+DOS name. */
if (ret != 0 || name_type == FILE_NAME_DOS)
- return ret;
+ goto out;
}
ret = utf16le_to_mbs(name, name_nbytes,
&mbs_name, &mbs_name_nbytes);
- if (ret != 0)
- return -1;
+ if (ret)
+ goto out;
if (mbs_name[0] == '.' &&
(mbs_name[1] == '\0' ||
ntfs_inode *ni = ntfs_inode_open(ctx->dir_ni->vol, mref);
if (!ni) {
ERROR_WITH_ERRNO("Failed to open NTFS inode");
+ ret = -1;
goto out_free_mbs_name;
}
path_len = ctx->path_len;
ntfs_inode_close(ni);
out_free_mbs_name:
FREE(mbs_name);
+out:
return ret;
}