X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Flookup_table.c;h=9109c481771fa1166e85220d53dc442fef3e6ca4;hp=4ad48bebb1ea207b5e077db079c1fa6c16d6228d;hb=2fa590c75e9433779557999870f0c8136157c2b7;hpb=69a6de2b04308332d9e5e8bc61f34e4b9460c12f diff --git a/src/lookup_table.c b/src/lookup_table.c index 4ad48beb..9109c481 100644 --- a/src/lookup_table.c +++ b/src/lookup_table.c @@ -678,7 +678,8 @@ static int write_wim_lookup_table_from_stream_list(struct list_head *stream_list, struct filedes *out_fd, struct resource_entry *out_res_entry, - int write_resource_flags) + int write_resource_flags, + struct wimlib_lzx_context **comp_ctx) { size_t table_size; struct wim_lookup_table_entry *lte; @@ -712,7 +713,8 @@ write_wim_lookup_table_from_stream_list(struct list_head *stream_list, WIMLIB_COMPRESSION_TYPE_NONE, out_res_entry, NULL, - write_resource_flags); + write_resource_flags, + comp_ctx); FREE(table_buf); return ret; } @@ -803,7 +805,8 @@ write_wim_lookup_table(WIMStruct *wim, int image, int write_flags, return write_wim_lookup_table_from_stream_list(stream_list, &wim->out_fd, out_res_entry, - write_resource_flags); + write_resource_flags, + &wim->lzx_context); } @@ -1027,8 +1030,7 @@ wim_pathname_to_stream(WIMStruct *wim, return -ENOENT; } } else { - lte = inode->i_lte; - stream_idx = 0; + lte = inode_unnamed_stream_resolved(inode, &stream_idx); } out: if (dentry_ret) @@ -1167,19 +1169,28 @@ inode_stream_lte(const struct wim_inode *inode, unsigned stream_idx, } struct wim_lookup_table_entry * -inode_unnamed_lte_resolved(const struct wim_inode *inode) +inode_unnamed_stream_resolved(const struct wim_inode *inode, u16 *stream_idx_ret) { wimlib_assert(inode->i_resolved); for (unsigned i = 0; i <= inode->i_num_ads; i++) { if (inode_stream_name_nbytes(inode, i) == 0 && !is_zero_hash(inode_stream_hash_resolved(inode, i))) { + *stream_idx_ret = i; return inode_stream_lte_resolved(inode, i); } } + *stream_idx_ret = 0; return NULL; } +struct wim_lookup_table_entry * +inode_unnamed_lte_resolved(const struct wim_inode *inode) +{ + u16 stream_idx; + return inode_unnamed_stream_resolved(inode, &stream_idx); +} + struct wim_lookup_table_entry * inode_unnamed_lte_unresolved(const struct wim_inode *inode, const struct wim_lookup_table *table)