MSYS2-packages/msys2-runtime-3.5/0048-fixup-Instead-of-creating-Cygwin-symlinks-use-deep-c.patch
2025-04-10 10:05:41 +02:00

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 ();