aboutsummaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2021-08-12 11:39:12 +0100
committerRon Yorston <rmy@pobox.com>2021-08-12 11:49:56 +0100
commitda7efea0e7520f7ce8627acc9f4037a2f875c47e (patch)
tree61f27c5f9bfe600a4bde12fb464e281ba7a28500 /win32
parent602137d1637787c334a1b858e2d4e7a5feb3fb1b (diff)
downloadbusybox-w32-da7efea0e7520f7ce8627acc9f4037a2f875c47e.tar.gz
busybox-w32-da7efea0e7520f7ce8627acc9f4037a2f875c47e.tar.bz2
busybox-w32-da7efea0e7520f7ce8627acc9f4037a2f875c47e.zip
win32: better handling of nested symlinks
Our realpath(3) implementation uses xmalloc_follow_symlinks() to expand symlinks. This detects when symlinks are too deeply nested but didn't set errno, so anything calling realpath(3) was unable to say what had gone wrong. (For example, 'ls -L' or 'stat -L'.) Set errno to ELOOP. This then leads to the problem that Windows doesn't know about ELOOP so reports 'Unknown error'. Add a replacement for strerror(3) which returns a sensible message. Costs 96 bytes.
Diffstat (limited to 'win32')
-rw-r--r--win32/mingw.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/win32/mingw.c b/win32/mingw.c
index 49dcd89d8..c592b8d2c 100644
--- a/win32/mingw.c
+++ b/win32/mingw.c
@@ -161,6 +161,14 @@ int err_win_to_posix(void)
161 return error; 161 return error;
162} 162}
163 163
164#undef strerror
165char *mingw_strerror(int errnum)
166{
167 if (errnum == ELOOP)
168 return (char *)"Too many levels of symbolic links";
169 return strerror(errnum);
170}
171
164static int zero_fd = -1; 172static int zero_fd = -1;
165static int rand_fd = -1; 173static int rand_fd = -1;
166 174