]> wimlib.net Git - wimlib/blobdiff - src/win32_capture.c
win32_build_dentry_tree(): Strip trailing slashes from paths
[wimlib] / src / win32_capture.c
index bec7b3d360a90e53b8f8fa2e53f506a6ddefc8be..20a86b5d3e9cd84ab877e2a9d7fc7dfe4e53e97c 100644 (file)
@@ -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);