From: Patrick Steinhardt <ps@pks.im>
To: Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, Johannes Schindelin <johannes.schindelin@gmx.de>
Subject: Re: [PATCH 1/5] mingw: do resolve symlinks in `getcwd()`
Date: Wed, 17 Dec 2025 15:44:02 +0100 [thread overview]
Message-ID: <aULBssdzMOw449HI@pks.im> (raw)
In-Reply-To: <1928738b464915e3fb796145688bbfcfcc0fee3c.1765899229.git.gitgitgadget@gmail.com>
On Tue, Dec 16, 2025 at 03:33:45PM +0000, Johannes Schindelin via GitGitGadget wrote:
> diff --git a/compat/mingw.c b/compat/mingw.c
> index ba1b7b6dd1..7215b127cc 100644
> --- a/compat/mingw.c
> +++ b/compat/mingw.c
> @@ -1251,18 +1251,16 @@ char *mingw_getcwd(char *pointer, int len)
> {
> wchar_t cwd[MAX_PATH], wpointer[MAX_PATH];
> DWORD ret = GetCurrentDirectoryW(ARRAY_SIZE(cwd), cwd);
> + HANDLE hnd;
>
> if (!ret || ret >= ARRAY_SIZE(cwd)) {
> errno = ret ? ENAMETOOLONG : err_win_to_posix(GetLastError());
> return NULL;
> }
> - ret = GetLongPathNameW(cwd, wpointer, ARRAY_SIZE(wpointer));
> - if (!ret && GetLastError() == ERROR_ACCESS_DENIED) {
> - HANDLE hnd = CreateFileW(cwd, 0,
> - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
> - OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
> - if (hnd == INVALID_HANDLE_VALUE)
> - return NULL;
> + hnd = CreateFileW(cwd, 0,
> + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
> + OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
> + if (hnd != INVALID_HANDLE_VALUE) {
> ret = GetFinalPathNameByHandleW(hnd, wpointer, ARRAY_SIZE(wpointer), 0);
> CloseHandle(hnd);
> if (!ret || ret >= ARRAY_SIZE(wpointer))
Okay. Due to the change we now also try calling `GetFileAttributesW()`
in case `CreateFileW()` fails, which wasn't the case before. But I'd
consider that to be a win -- if we cannot figure out the final path
name, then we can at least return the unresolved current working
directory.
Patrick
> @@ -1271,13 +1269,11 @@ char *mingw_getcwd(char *pointer, int len)
> return NULL;
> return pointer;
> }
> - if (!ret || ret >= ARRAY_SIZE(wpointer))
> - return NULL;
> - if (GetFileAttributesW(wpointer) == INVALID_FILE_ATTRIBUTES) {
> + if (GetFileAttributesW(cwd) == INVALID_FILE_ATTRIBUTES) {
> errno = ENOENT;
> return NULL;
> }
> - if (xwcstoutf(pointer, wpointer, len) < 0)
> + if (xwcstoutf(pointer, cwd, len) < 0)
> return NULL;
> convert_slashes(pointer);
> return pointer;
next prev parent reply other threads:[~2025-12-17 14:44 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-16 15:33 [PATCH 0/5] Last preparations before upstreaming Git for Windows' symlink support Johannes Schindelin via GitGitGadget
2025-12-16 15:33 ` [PATCH 1/5] mingw: do resolve symlinks in `getcwd()` Johannes Schindelin via GitGitGadget
2025-12-17 14:44 ` Patrick Steinhardt [this message]
2025-12-16 15:33 ` [PATCH 2/5] init: do parse _all_ core.* settings early Johannes Schindelin via GitGitGadget
2025-12-17 14:44 ` Patrick Steinhardt
2025-12-16 15:33 ` [PATCH 3/5] strbuf_readlink(): avoid calling `readlink()` twice in corner-cases Karsten Blees via GitGitGadget
2025-12-16 15:33 ` [PATCH 4/5] strbuf_readlink(): support link targets that exceed PATH_MAX Karsten Blees via GitGitGadget
2025-12-17 14:44 ` Patrick Steinhardt
2025-12-19 8:50 ` Johannes Schindelin
2025-12-19 11:51 ` Patrick Steinhardt
2025-12-30 5:00 ` Junio C Hamano
2025-12-17 23:39 ` Junio C Hamano
2025-12-16 15:33 ` [PATCH 5/5] trim_last_path_component(): avoid hard-coding the directory separator Karsten Blees via GitGitGadget
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aULBssdzMOw449HI@pks.im \
--to=ps@pks.im \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=johannes.schindelin@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).