return p;
}
+static int
+winnt_rpfix_progress(struct add_image_params *params, const wchar_t *path,
+ const struct reparse_data *rpdata,
+ enum wimlib_progress_msg msg)
+{
+ size_t print_name_nchars = rpdata->print_name_nbytes / sizeof(wchar_t);
+ wchar_t print_name0[print_name_nchars + 1];
+
+ wmemcpy(print_name0, rpdata->print_name, print_name_nchars);
+ print_name0[print_name_nchars] = L'\0';
+
+ params->progress.scan.cur_path = printable_path(path);
+ params->progress.scan.symlink_target = print_name0;
+ return do_capture_progress(params, msg, NULL);
+}
+
static int
winnt_try_rpfix(u8 *rpbuf, u16 *rpbuflen_p,
u64 capture_root_ino, u64 capture_root_dev,
{
struct reparse_data rpdata;
const wchar_t *rel_target;
+ int ret;
if (parse_reparse_data(rpbuf, *rpbuflen_p, &rpdata)) {
/* Couldn't even understand the reparse data. Don't try the
/* Target points outside of the tree being captured. Exclude
* this reparse point from the capture (but inform the library
* user). */
- size_t print_name_nchars = rpdata.print_name_nbytes / sizeof(wchar_t);
- wchar_t print_name0[print_name_nchars + 1];
- print_name0[print_name_nchars] = L'\0';
- wmemcpy(print_name0, rpdata.print_name, print_name_nchars);
-
- params->progress.scan.cur_path = printable_path(path);
- params->progress.scan.symlink_target = print_name0;
- int ret = do_capture_progress(params,
- WIMLIB_SCAN_DENTRY_EXCLUDED_SYMLINK,
- NULL);
+ ret = winnt_rpfix_progress(params, path, &rpdata,
+ WIMLIB_SCAN_DENTRY_EXCLUDED_SYMLINK);
if (ret)
return ret;
return RP_EXCLUDED;
if (make_reparse_buffer(&rpdata, rpbuf, rpbuflen_p))
return RP_NOT_FIXED;
}
+ ret = winnt_rpfix_progress(params, path, &rpdata,
+ WIMLIB_SCAN_DENTRY_FIXED_SYMLINK);
+ if (ret)
+ return ret;
return RP_FIXED;
}
if (should_exclude_path(full_path + params->capture_root_nchars,
full_path_nchars - params->capture_root_nchars,
params->config))
- {
- ret = 0;
goto out_progress;
- }
/* Open the file. */
status = winnt_openat(cur_dir,
if (inode->i_nlink > 1) {
/* Shared inode (hard link); skip reading per-inode information.
*/
- ret = 0;
goto out_progress;
}