[PATCH 2/2] mingw_fopen: report ENOENT for invalid file names
- From
Johannes Sixt <j6t@kdbg.org>
- Date
- May 29, 2017, 20:27 UTC
- Message-ID
- <bbdda290-d634-14c6-91ed-c8245ae50a54@kdbg.org>
- In-Reply-To
- <17b3d445-0cc7-2000-dc67-11fb53c7040b@kdbg.org>
On Windows, certain characters are prohibited in file names, most prominently the colon. When fopen() is called with such an invalid file name, the underlying Windows API actually reports a particular error, but since there is no suitable errno value, this error is translated to EINVAL. Detect the case and report ENOENT instead.
Signed-off-by: Johannes Sixt <j6t@kdbg.org> --- compat/mingw.c | 2 ++ t/t5580-clone-push-unc.sh | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/compat/mingw.c b/compat/mingw.c index 62109cc4e6..ce6fe8f46b 100644 --- a/compat/mingw.c +++ b/compat/mingw.c @@ -423,6 +423,8 @@ FILE *mingw_fopen (const char *filename, const char *otype) return NULL; } file = _wfopen(wfilename, wotype); + if (!file && GetLastError() == ERROR_INVALID_NAME) + errno = ENOENT; if (file && hide && set_hidden_flag(wfilename, 1)) warning("could not mark '%s' as hidden.", filename); return file; diff --git a/t/t5580-clone-push-unc.sh b/t/t5580-clone-push-unc.sh index fd719a209e..93ce99ba3c 100755 --- a/t/t5580-clone-push-unc.sh +++ b/t/t5580-clone-push-unc.sh @@ -8,7 +8,7 @@ if ! test_have_prereq MINGW; then test_done fi -test_expect_failure 'remote nick cannot contain backslashes' ' +test_expect_success 'remote nick cannot contain backslashes' ' BACKSLASHED="$(pwd | tr / \\\\)" && git ls-remote "$BACKSLASHED" >out 2>err && ! grep "unable to access" err
-- 2.13.0.55.g17b7d13330