struct win32_capture_state state;
unsigned vol_flags;
DWORD dret;
- bool need_prefix_free = false;
if (!win32func_FindFirstStreamW
#ifdef WITH_NTDLL
} else {
wmemcpy(path, L"\\\\?\\", 4);
path_nchars = 4 + dret;
- /* Update pattern prefix */
- if (params->config != NULL)
- {
- params->config->_prefix = TSTRDUP(path);
- params->config->_prefix_num_tchars = path_nchars;
- if (params->config->_prefix == NULL)
- {
- ret = WIMLIB_ERR_NOMEM;
- goto out_free_path;
- }
- need_prefix_free = true;
- }
}
} else {
wmemcpy(path, root_disk_path, path_nchars + 1);
}
+ /* Strip trailing slashes. */
+ while (path_nchars >= 2 &&
+ is_any_path_separator(path[path_nchars - 1]) &&
+ path[path_nchars - 2] != L':')
+ {
+ path[--path_nchars] = L'\0';
+ }
+
+ /* Update pattern prefix. */
+ if (params->config != NULL)
+ {
+ params->config->_prefix = TSTRDUP(path);
+ params->config->_prefix_num_tchars = path_nchars;
+ if (params->config->_prefix == NULL)
+ {
+ ret = WIMLIB_ERR_NOMEM;
+ goto out_free_path;
+ }
+ }
+
memset(&state, 0, sizeof(state));
ret = win32_build_dentry_tree_recursive(root_ret, path,
path_nchars, params,
&state, vol_flags);
- if (need_prefix_free)
+ if (params->config != NULL)
FREE(params->config->_prefix);
out_free_path:
FREE(path);