X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fntfs-3g_apply.c;h=4e5926bcc71f21ea0fad433e043b33095b8e0abc;hp=0de2bb042da01fc98a5421a5f7567ad60f1775d7;hb=fe328582e4ba43a639944067c3232358069c2e01;hpb=d490e6e2a9cb3e421556ed3e50e0665ec955a418;ds=sidebyside diff --git a/src/ntfs-3g_apply.c b/src/ntfs-3g_apply.c index 0de2bb04..4e5926bc 100644 --- a/src/ntfs-3g_apply.c +++ b/src/ntfs-3g_apply.c @@ -476,9 +476,9 @@ do_apply_dentry_ntfs(struct wim_dentry *dentry, ntfs_inode *dir_ni, short_name_mbs_nbytes, 0); FREE(short_name_mbs); if (ret) { - ERROR_WITH_ERRNO("Could not set DOS (short) name for `%s'", - dentry->_full_path); - ret = WIMLIB_ERR_NTFS_3G; + WARNING_WITH_ERRNO("Could not set DOS (short) name for `%s'", + dentry->_full_path); + ret = 0; } /* inodes have been closed by ntfs_set_ntfs_dos_name(). */ goto out; @@ -513,6 +513,10 @@ apply_root_dentry_ntfs(struct wim_dentry *dentry, ntfs_inode *ni; int ret = 0; + ret = calculate_dentry_full_path(dentry); + if (ret) + return ret; + ni = ntfs_pathname_to_inode(vol, NULL, "/"); if (!ni) { ERROR_WITH_ERRNO("Could not find root NTFS inode"); @@ -539,10 +543,6 @@ apply_dentry_ntfs(struct wim_dentry *dentry, void *arg) struct wim_dentry *other; int ret; - ret = calculate_dentry_full_path(dentry); - if (ret) - return ret; - /* Treat the root dentry specially. */ if (dentry_is_root(dentry)) return apply_root_dentry_ntfs(dentry, vol, w, @@ -598,10 +598,10 @@ apply_dentry_ntfs(struct wim_dentry *dentry, void *arg) again: orig_dentry = NULL; if (!dentry->d_inode->i_dos_name_extracted && - !dentry_has_short_name(dentry)) + (!dentry_has_short_name(dentry) || dentry->dos_name_invalid)) { inode_for_each_dentry(other, dentry->d_inode) { - if (dentry_has_short_name(other)) { + if (dentry_has_short_name(other) && !other->dos_name_invalid) { orig_dentry = dentry; dentry = other; break; @@ -609,6 +609,11 @@ again: } } dentry->d_inode->i_dos_name_extracted = 1; + + ret = calculate_dentry_full_path(dentry); + if (ret) + return ret; + ntfs_inode *dir_ni = dentry_open_parent_ni(dentry, vol); if (dir_ni) { ret = do_apply_dentry_ntfs(dentry, dir_ni, arg);