{
tchar *p = dest;
+#ifdef __WIN32__
+ /* Skip drive letter */
+ if (!is_rp_path_separator(*dest))
+ p += 2;
+#endif
+
DEBUG("Fixing symlink or junction \"%"TS"\"", dest);
for (;;) {
tchar save;
*(p - 1) = RP_PATH_SEPARATOR;
while (p - 1 >= dest && is_rp_path_separator(*(p - 1)))
p--;
+ #ifdef __WIN32__
+ if (!is_rp_path_separator(dest[0])) {
+ *--p = dest[1];
+ *--p = dest[0];
+ }
+ #endif
+ wimlib_assert(p >= dest);
return p;
}
if (ret < 0)
return RP_NOT_FIXED;
stripped_chars = ret;
+ if (stripped_chars)
+ stripped_chars -= 2;
target[target_nchars] = L'\0';
orig_target = target;
target = capture_fixup_absolute_symlink(target + stripped_chars,
wmemmove(orig_target + stripped_chars, target, target_nchars + 1);
*target_nbytes_p = (target_nchars + stripped_chars) * sizeof(wchar_t);
DEBUG("Fixed reparse point (new target: \"%ls\")", orig_target);
- if (stripped_chars == 6)
+ if (stripped_chars)
return RP_FIXED_FULLPATH;
else
return RP_FIXED_ABSPATH;
if (path_nchars > 32767)
return WIMLIB_ERR_INVALID_PARAM;
+ if (GetFileAttributesW(root_disk_path) == INVALID_FILE_ATTRIBUTES &&
+ GetLastError() == ERROR_FILE_NOT_FOUND)
+ {
+ ERROR("Capture directory \"%ls\" does not exist!",
+ root_disk_path);
+ return WIMLIB_ERR_OPENDIR;
+ }
+
ret = win32_get_file_and_vol_ids(root_disk_path,
¶ms->capture_root_ino,
¶ms->capture_root_dev);