X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Funix_capture.c;h=08fd31ef64e1eec3bc66f38ebbf77f5a57b291ac;hp=a61d91f25f61fdc5f2cf6b924f0db2a9e60c37da;hb=be5acf31aa8292dcd4a2829492faefb0b200d28f;hpb=0b52336c9e67aa31c04af59867c2541384141a3d diff --git a/src/unix_capture.c b/src/unix_capture.c index a61d91f2..08fd31ef 100644 --- a/src/unix_capture.c +++ b/src/unix_capture.c @@ -103,35 +103,33 @@ static int unix_scan_regular_file(const char *path, u64 size, struct wim_inode *inode, struct list_head *unhashed_blobs) { - struct blob_descriptor *blob; + struct blob_descriptor *blob = NULL; struct wim_inode_stream *strm; inode->i_attributes = FILE_ATTRIBUTE_NORMAL; if (size) { - char *file_on_disk = STRDUP(path); - if (!file_on_disk) - return WIMLIB_ERR_NOMEM; blob = new_blob_descriptor(); - if (!blob) { - FREE(file_on_disk); - return WIMLIB_ERR_NOMEM; - } - blob->file_on_disk = file_on_disk; - blob->file_inode = inode; + if (unlikely(!blob)) + goto err_nomem; + blob->file_on_disk = STRDUP(path); + if (unlikely(!blob->file_on_disk)) + goto err_nomem; blob->blob_location = BLOB_IN_FILE_ON_DISK; blob->size = size; - } else { - blob = NULL; + blob->file_inode = inode; } strm = inode_add_stream(inode, STREAM_TYPE_DATA, NO_STREAM_NAME, blob); - if (!strm) { - free_blob_descriptor(blob); - return WIMLIB_ERR_NOMEM; - } + if (unlikely(!strm)) + goto err_nomem; + prepare_unhashed_blob(blob, inode, strm->stream_id, unhashed_blobs); return 0; + +err_nomem: + free_blob_descriptor(blob); + return WIMLIB_ERR_NOMEM; } static int