]> wimlib.net Git - wimlib/blobdiff - src/unix_capture.c
wimlib: Clean up code that sends capture progress messages
[wimlib] / src / unix_capture.c
index fe95b9a6b6c7173bca3e225a657b7d30136fc343..ff9a6ac00179e977ebd8cadf8dc013717c86957b 100644 (file)
@@ -201,30 +201,17 @@ unix_build_dentry_tree_recursive(struct wim_dentry **root_ret,
                                 struct add_image_params *params)
 {
        struct wim_dentry *root = NULL;
-       int ret = 0;
+       int ret;
        struct wim_inode *inode;
 
+       params->progress.scan.cur_path = path;
+
        if (exclude_path(path, path_len, params->config, true)) {
-               if ((params->add_flags & WIMLIB_ADD_FLAG_EXCLUDE_VERBOSE)
-                   && params->progress_func)
-               {
-                       union wimlib_progress_info info;
-                       info.scan.cur_path = path;
-                       info.scan.status = WIMLIB_SCAN_DENTRY_EXCLUDED;
-                       params->progress_func(WIMLIB_PROGRESS_MSG_SCAN_DENTRY, &info);
-               }
+               do_capture_progress(params, WIMLIB_SCAN_DENTRY_EXCLUDED);
+               ret = 0;
                goto out;
        }
 
-       if ((params->add_flags & WIMLIB_ADD_FLAG_VERBOSE)
-           && params->progress_func)
-       {
-               union wimlib_progress_info info;
-               info.scan.cur_path = path;
-               info.scan.status = WIMLIB_SCAN_DENTRY_OK;
-               params->progress_func(WIMLIB_PROGRESS_MSG_SCAN_DENTRY, &info);
-       }
-
        struct stat stbuf;
        int (*stat_fn)(const char *restrict, struct stat *restrict);
        if ((params->add_flags & WIMLIB_ADD_FLAG_DEREFERENCE) ||
@@ -244,19 +231,16 @@ unix_build_dentry_tree_recursive(struct wim_dentry **root_ret,
                if (params->add_flags & WIMLIB_ADD_FLAG_NO_UNSUPPORTED_EXCLUDE)
                {
                        ERROR("Can't archive unsupported file \"%s\"", path);
-                       return WIMLIB_ERR_UNSUPPORTED_FILE;
-               }
-               if ((params->add_flags & WIMLIB_ADD_FLAG_EXCLUDE_VERBOSE)
-                   && params->progress_func)
-               {
-                       union wimlib_progress_info info;
-                       info.scan.cur_path = path;
-                       info.scan.status = WIMLIB_SCAN_DENTRY_UNSUPPORTED;
-                       params->progress_func(WIMLIB_PROGRESS_MSG_SCAN_DENTRY, &info);
+                       ret = WIMLIB_ERR_UNSUPPORTED_FILE;
+                       goto out;
                }
+               do_capture_progress(params, WIMLIB_SCAN_DENTRY_UNSUPPORTED);
+               ret = 0;
                goto out;
        }
 
+       do_capture_progress(params, WIMLIB_SCAN_DENTRY_OK);
+
        ret = inode_table_new_dentry(&params->inode_table,
                                     path_basename_with_len(path, path_len),
                                     stbuf.st_ino, stbuf.st_dev, false, &root);
@@ -265,8 +249,11 @@ unix_build_dentry_tree_recursive(struct wim_dentry **root_ret,
 
        inode = root->d_inode;
 
-       if (inode->i_nlink > 1) /* Already captured this inode? */
+       if (inode->i_nlink > 1) {
+               /* Already captured this inode? */
+               ret = 0;
                goto out;
+       }
 
 #ifdef HAVE_STAT_NANOSECOND_PRECISION
        inode->i_creation_time = timespec_to_wim_timestamp(stbuf.st_mtim);
@@ -295,11 +282,15 @@ unix_build_dentry_tree_recursive(struct wim_dentry **root_ret,
                ret = unix_capture_directory(root, path, path_len, params);
        else
                ret = unix_capture_symlink(&root, path, inode, params);
+
+       if (ret)
+               goto out;
+
 out:
-       if (ret == 0)
-               *root_ret = root;
-       else
+       if (ret)
                free_dentry_tree(root, params->lookup_table);
+       else
+               *root_ret = root;
        return ret;
 }