From: Johannes Sixt Date: Mon, 29 May 2017 20:27:35 GMT Subject: [PATCH 2/2] mingw_fopen: report ENOENT for invalid file names Message-ID: 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 --- 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