From: Johannes Sixt Date: Tue, 11 Dec 2018 20:36:06 GMT Subject: Re: [PATCH 2/2] mingw: allow absolute paths without drive prefix Message-ID: <8a484f86-1d43-fc0a-22b4-39c770cda6cb@kdbg.org> In-Reply-To: Am 11.12.18 um 12:25 schrieb Johannes Schindelin: > On Mon, 10 Dec 2018, Johannes Sixt wrote: >>> diff --git a/compat/mingw.c b/compat/mingw.c >>> index 34b3880b29..4d009901d8 100644 >>> --- a/compat/mingw.c >>> +++ b/compat/mingw.c >>> @@ -928,11 +928,19 @@ unsigned int sleep (unsigned int seconds) >>> char *mingw_mktemp(char *template) >>> { >>> wchar_t wtemplate[MAX_PATH]; >>> + int offset = 0; >>> + >>> if (xutftowcs_path(wtemplate, template) < 0) >>> return NULL; >>> + >>> + if (is_dir_sep(template[0]) && !is_dir_sep(template[1]) && >>> + iswalpha(wtemplate[0]) && wtemplate[1] == L':') { >>> + /* We have an absolute path missing the drive prefix */ >> >> This comment is true for the source part, template, but I can't find >> where the destination, wtemplate, suddenly gets the drive prefix. As far >> as I can see, xutftowcs_path() just does a plain textual conversion >> without any interpretation of the text as path. Can you explain it? > > It is legal on Windows for such a path to lack the drive prefix, also in > the wide-character version. So the explanation is: even `wtemplate` won't > get the drive prefix. It does not need to. I'm sorry, my question was extremely fuzzy. I actually wanted to know how the condition that you introduce in this patch can ever be true. And after looking at the Git for Windows code, I could answer it myself: it cannot. Not with this patch alone. In GfW, there is additional code in xutftowcs_path() that massages wtemplate to receive a drive prefix; but vanilla Git does not have that code, so that is_dir_sep(template[0]) and iswalpha(wtemplate[0]) can never be true at the same time at this point. -- Hannes