58 lines
2.1 KiB
Diff
58 lines
2.1 KiB
Diff
From ed1c4f3322f115bd9a8e9306014d50bc41ad467b Mon Sep 17 00:00:00 2001
|
|
From: Jeremy Drake <github@jdrake.com>
|
|
Date: Thu, 30 Jan 2025 17:45:16 -0800
|
|
Subject: [PATCH 48/N] fixup! Instead of creating Cygwin symlinks, use deep
|
|
copy by default
|
|
|
|
Don't assume the first two entries are always `.` and `..`. On the root
|
|
of a volume, those don't seem to be present.
|
|
---
|
|
winsup/cygwin/path.cc | 16 ++++++++--------
|
|
1 file changed, 8 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
|
|
index dfbbdaa..1e6baef 100644
|
|
--- a/winsup/cygwin/path.cc
|
|
+++ b/winsup/cygwin/path.cc
|
|
@@ -1697,7 +1697,6 @@ recursiveCopy (PUNICODE_STRING src, PUNICODE_STRING dst, PCWSTR origpath)
|
|
{
|
|
WIN32_FIND_DATAW dHfile;
|
|
HANDLE dH = INVALID_HANDLE_VALUE;
|
|
- BOOL findfiles;
|
|
int srcpos = src->Length;
|
|
int dstpos = dst->Length;
|
|
int res = -1;
|
|
@@ -1729,15 +1728,15 @@ recursiveCopy (PUNICODE_STRING src, PUNICODE_STRING dst, PCWSTR origpath)
|
|
dH = FindFirstFileExW (src->Buffer, FindExInfoBasic, &dHfile,
|
|
FindExSearchNameMatch, NULL,
|
|
FIND_FIRST_EX_LARGE_FETCH);
|
|
- debug_printf ("dHfile(1): %W", dHfile.cFileName);
|
|
- findfiles = FindNextFileW (dH, &dHfile);
|
|
- debug_printf ("dHfile(2): %W", dHfile.cFileName);
|
|
- findfiles = FindNextFileW (dH, &dHfile);
|
|
- while (findfiles)
|
|
+ do
|
|
{
|
|
bool isdirlink = false;
|
|
+ debug_printf ("dHfile: %W", dHfile.cFileName);
|
|
+ if (dHfile.cFileName[0] == L'.' &&
|
|
+ (!dHfile.cFileName[1] ||
|
|
+ (dHfile.cFileName[1] == L'.' && !dHfile.cFileName[2])))
|
|
+ continue;
|
|
/* Append the directory item filename to both source and destination */
|
|
- debug_printf ("dHfile(3): %W", dHfile.cFileName);
|
|
src->Length = srcpos + sizeof (WCHAR);
|
|
dst->Length = dstpos + sizeof (WCHAR);
|
|
RtlAppendUnicodeToString (src, dHfile.cFileName);
|
|
@@ -1781,8 +1780,9 @@ recursiveCopy (PUNICODE_STRING src, PUNICODE_STRING dst, PCWSTR origpath)
|
|
goto done;
|
|
}
|
|
}
|
|
- findfiles = FindNextFileW (dH, &dHfile);
|
|
}
|
|
+ while (FindNextFileW (dH, &dHfile));
|
|
+
|
|
if (GetLastError() != ERROR_NO_MORE_FILES)
|
|
{
|
|
__seterrno ();
|