From: Johannes Sixt Date: Thu, 18 Dec 2025 10:48:44 GMT Subject: Re: [PATCH 03/18] mingw: drop the separate `do_lstat()` function Message-ID: <52d0ef24-ae21-400c-836b-aa43dd5899d2@kdbg.org> In-Reply-To: Am 17.12.25 um 15:08 schrieb Karsten Blees via GitGitGadget: > From: Karsten Blees > > With the new `mingw_stat()` implementation, `do_lstat()` is only called > from `mingw_lstat()` (with the function parameter `follow == 0`). Remove > the extra function and the old `mingw_stat()`-specific (`follow == 1`) > logic. > > Signed-off-by: Karsten Blees > Signed-off-by: Johannes Schindelin > --- > compat/mingw.c | 22 ++-------------------- > 1 file changed, 2 insertions(+), 20 deletions(-) > > diff --git a/compat/mingw.c b/compat/mingw.c > index 59afd69686..ec6c2801d3 100644 > --- a/compat/mingw.c > +++ b/compat/mingw.c > @@ -917,14 +917,7 @@ static int has_valid_directory_prefix(wchar_t *wfilename) > return 1; > } > > -/* We keep the do_lstat code in a separate function to avoid recursion. > - * When a path ends with a slash, the stat will fail with ENOENT. In > - * this case, we strip the trailing slashes and stat again. > - * > - * If follow is true then act like stat() and report on the link > - * target. Otherwise report on the link itself. > - */ > -static int do_lstat(int follow, const char *file_name, struct stat *buf) > +int mingw_lstat(const char *file_name, struct stat *buf) Oh, here goes the entire function including the comment. Fine, then. Disregard my comment on 01/18. > { > WIN32_FILE_ATTRIBUTE_DATA fdata; > wchar_t wfilename[MAX_PATH]; > @@ -958,13 +951,7 @@ static int do_lstat(int follow, const char *file_name, struct stat *buf) > if (handle != INVALID_HANDLE_VALUE) { > if ((findbuf.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) && > (findbuf.dwReserved0 == IO_REPARSE_TAG_SYMLINK)) { > - if (follow) { > - char buffer[MAXIMUM_REPARSE_DATA_BUFFER_SIZE]; > - buf->st_size = readlink(file_name, buffer, MAXIMUM_REPARSE_DATA_BUFFER_SIZE); > - } else { > - buf->st_mode = S_IFLNK; > - } > - buf->st_mode |= S_IREAD; > + buf->st_mode = S_IFLNK | S_IREAD; > if (!(findbuf.dwFileAttributes & FILE_ATTRIBUTE_READONLY)) > buf->st_mode |= S_IWRITE; > } > @@ -1022,11 +1009,6 @@ static int get_file_info_by_handle(HANDLE hnd, struct stat *buf) > return 0; > } > > -int mingw_lstat(const char *file_name, struct stat *buf) > -{ > - return do_lstat(0, file_name, buf); > -} > - > int mingw_stat(const char *file_name, struct stat *buf) > { > wchar_t wfile_name[MAX_PATH]; An obviously correct rewrite. -- Hannes