X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fmodify.c;h=c979162a8ed11aadd2fd95ef012b7ef454a57cba;hp=141f2dd8aac45cb0de271803cb2a6d71a4258f8e;hb=68b023ab834029db11ce9bf150dadd9c80e59404;hpb=1dde5fb0d809f2f5e032e4d5241d1cb15ff3eb65 diff --git a/src/modify.c b/src/modify.c index 141f2dd8..c979162a 100644 --- a/src/modify.c +++ b/src/modify.c @@ -186,6 +186,10 @@ static int build_dentry_tree(struct dentry **root_ret, const char *root_disk_pat struct lookup_table_entry *lte; u8 hash[SHA1_HASH_SIZE]; + /* Empty files do not have to have a lookup table entry. */ + if (root_stbuf.st_size == 0) + goto out; + /* For each regular file, we must check to see if the file is in * the lookup table already; if it is, we increment its refcnt; * otherwise, we create a new lookup table entry and insert it. @@ -219,6 +223,7 @@ static int build_dentry_tree(struct dentry **root_ret, const char *root_disk_pat } root->lte = lte; } +out: *root_ret = root; return ret; } @@ -740,6 +745,7 @@ int do_add_image(WIMStruct *w, const char *dir, const char *name, struct image_metadata *imd; struct wim_security_data *sd; struct capture_config config; + struct link_group_table *lgt; int ret; DEBUG("Adding dentry tree from dir `%s'.", dir); @@ -798,13 +804,20 @@ int do_add_image(WIMStruct *w, const char *dir, const char *name, if (ret != 0) goto out_free_dentry_tree; + lgt = w->image_metadata[w->hdr.image_count - 1].lgt; DEBUG("Inserting dentries into hard link group table"); - ret = for_dentry_in_tree(root_dentry, link_group_table_insert, - w->image_metadata[w->hdr.image_count - 1].lgt); + ret = for_dentry_in_tree(root_dentry, link_group_table_insert, lgt); + + if (ret != 0) + goto out_destroy_imd; + + DEBUG("Cleanup up the hard link groups"); + ret = fix_link_groups(lgt); if (ret != 0) goto out_destroy_imd; - DEBUG("Assigning hard link groups"); - assign_link_groups(w->image_metadata[w->hdr.image_count - 1].lgt); + + DEBUG("Assigning hard link group IDs"); + assign_link_group_ids(w->image_metadata[w->hdr.image_count - 1].lgt); if (flags & WIMLIB_ADD_IMAGE_FLAG_BOOT) wimlib_set_boot_idx(w, w->hdr.image_count);