From eec1e37112f966e9cf31344b751c60bd51f9385a Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Sat, 28 Dec 2013 13:47:31 -0600 Subject: [PATCH] win32_build_dentry_tree(): Strip trailing slashes from paths --- src/win32_capture.c | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/src/win32_capture.c b/src/win32_capture.c index bec7b3d3..20a86b5d 100644 --- a/src/win32_capture.c +++ b/src/win32_capture.c @@ -1358,7 +1358,6 @@ win32_build_dentry_tree(struct wim_dentry **root_ret, struct win32_capture_state state; unsigned vol_flags; DWORD dret; - bool need_prefix_free = false; if (!win32func_FindFirstStreamW #ifdef WITH_NTDLL @@ -1405,28 +1404,36 @@ win32_build_dentry_tree(struct wim_dentry **root_ret, } 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); -- 2.43.0