X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fiterate_dir.c;h=55d2a2a751a2a51dacea48111ea109133efdf180;hp=c9de38cf1f118591400c4d0ebed669f6e4aa74fe;hb=139f42ea23511d81a44e8925a24f7f218318010c;hpb=8df639463ae0c754d2b1af3d6c1d22e59ee3ccf8 diff --git a/src/iterate_dir.c b/src/iterate_dir.c index c9de38cf..55d2a2a7 100644 --- a/src/iterate_dir.c +++ b/src/iterate_dir.c @@ -6,7 +6,7 @@ */ /* - * Copyright (C) 2013, 2015 Eric Biggers + * Copyright (C) 2013-2016 Eric Biggers * * This file is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free @@ -31,6 +31,7 @@ #include "wimlib/dentry.h" #include "wimlib/encoding.h" #include "wimlib/metadata.h" +#include "wimlib/object_id.h" #include "wimlib/paths.h" #include "wimlib/security.h" #include "wimlib/timestamp.h" @@ -49,12 +50,11 @@ stream_to_wimlib_stream_entry(const struct wim_inode *inode, const u8 *hash; if (stream_is_named(strm)) { - size_t dummy; int ret; ret = utf16le_get_tstr(strm->stream_name, utf16le_len_bytes(strm->stream_name), - &wstream->stream_name, &dummy); + &wstream->stream_name, NULL); if (ret) return ret; } @@ -86,25 +86,26 @@ init_wimlib_dentry(struct wimlib_dir_entry *wdentry, struct wim_dentry *dentry, WIMStruct *wim, int flags) { int ret; - size_t dummy; const struct wim_inode *inode = dentry->d_inode; const struct wim_inode_stream *strm; struct wimlib_unix_data unix_data; + const void *object_id; + u32 object_id_len; ret = utf16le_get_tstr(dentry->d_name, dentry->d_name_nbytes, - &wdentry->filename, &dummy); + &wdentry->filename, NULL); if (ret) return ret; ret = utf16le_get_tstr(dentry->d_short_name, dentry->d_short_name_nbytes, - &wdentry->dos_name, &dummy); + &wdentry->dos_name, NULL); if (ret) return ret; ret = calculate_dentry_full_path(dentry); if (ret) return ret; - wdentry->full_path = dentry->_full_path; + wdentry->full_path = dentry->d_full_path; for (struct wim_dentry *d = dentry; !dentry_is_root(d); d = d->d_parent) wdentry->depth++; @@ -129,6 +130,11 @@ init_wimlib_dentry(struct wimlib_dir_entry *wdentry, struct wim_dentry *dentry, wdentry->unix_mode = unix_data.mode; wdentry->unix_rdev = unix_data.rdev; } + object_id = inode_get_object_id(inode, &object_id_len); + if (unlikely(object_id != NULL)) { + memcpy(&wdentry->object_id, object_id, + min(object_id_len, sizeof(wdentry->object_id))); + } strm = inode_get_unnamed_stream(inode, get_default_stream_type(inode)); if (strm) { @@ -200,25 +206,17 @@ do_iterate_dir_tree(WIMStruct *wim, struct wim_dentry *child; ret = 0; - if (default_ignore_case) { - for_dentry_child_case_insensitive(child, dentry) { - ret = do_iterate_dir_tree(wim, child, - flags & ~WIMLIB_ITERATE_DIR_TREE_FLAG_CHILDREN, - cb, user_ctx); - if (ret) - break; - } - } else { - for_dentry_child(child, dentry) { - ret = do_iterate_dir_tree(wim, child, - flags & ~WIMLIB_ITERATE_DIR_TREE_FLAG_CHILDREN, - cb, user_ctx); - if (ret) - break; - } + for_dentry_child(child, dentry) { + ret = do_iterate_dir_tree(wim, child, + flags & ~WIMLIB_ITERATE_DIR_TREE_FLAG_CHILDREN, + cb, user_ctx); + if (ret) + break; } } out_free_wimlib_dentry: + FREE(dentry->d_full_path); + dentry->d_full_path = NULL; free_wimlib_dentry(wdentry); out: return ret;