diff options
author | Ron Yorston <rmy@pobox.com> | 2021-08-12 11:39:12 +0100 |
---|---|---|
committer | Ron Yorston <rmy@pobox.com> | 2021-08-12 11:49:56 +0100 |
commit | da7efea0e7520f7ce8627acc9f4037a2f875c47e (patch) | |
tree | 61f27c5f9bfe600a4bde12fb464e281ba7a28500 /win32/mingw.c | |
parent | 602137d1637787c334a1b858e2d4e7a5feb3fb1b (diff) | |
download | busybox-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/mingw.c')
-rw-r--r-- | win32/mingw.c | 8 |
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 | ||
165 | char *mingw_strerror(int errnum) | ||
166 | { | ||
167 | if (errnum == ELOOP) | ||
168 | return (char *)"Too many levels of symbolic links"; | ||
169 | return strerror(errnum); | ||
170 | } | ||
171 | |||
164 | static int zero_fd = -1; | 172 | static int zero_fd = -1; |
165 | static int rand_fd = -1; | 173 | static int rand_fd = -1; |
166 | 174 | ||