git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] config.mak.uname: Define FREAD_READS_DIRECTORIES for GNU/Hurd

From
Jessica Clarke <jrtc27@jrtc27.com>
Date
Apr 22, 2020, 18:50 UTC
Message-ID
<452EC7D1-BE96-4172-8F70-3E7384C87280@jrtc27.com>
In-Reply-To
<CA+sFfMfre6W5GcPh1pWcroFD9S9OPj_uLp5CK11yh-UhqgDs2w@mail.gmail.com>
On 22 Apr 2020, at 19:48, Brandon Casey <drafnel@gmail.com> wrote:
Show 61 quoted lines
> On Wed, Apr 22, 2020 at 9:41 AM Jonathan Nieder <jrnieder@gmail.com> wrote:
>> 
>> Jessica Clarke wrote:
>> 
>>> GNU/Hurd is another platform that behaves like this. Set it to
>>> UnfortunatelyYes so that config directory files are correctly processed.
>>> This fixes the corresponding 'proper error on directory "files"' test in
>>> t1308-config-set.sh.
>>> 
>>> Thanks-to: Jeff King <peff@peff.net>
>>> Signed-off-by: Jessica Clarke <jrtc27@jrtc27.com>
>>> ---
>>> config.mak.uname | 1 +
>>> 1 file changed, 1 insertion(+)
>> 
>> Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
>> Thanks.
>> 
>>> diff --git a/config.mak.uname b/config.mak.uname
>>> index 0ab8e00938..3e526f6b9f 100644
>>> --- a/config.mak.uname
>>> +++ b/config.mak.uname
>>> @@ -308,6 +308,7 @@ ifeq ($(uname_S),GNU)
>>>      NO_STRLCPY = YesPlease
>>>      HAVE_PATHS_H = YesPlease
>>>      LIBC_CONTAINS_LIBINTL = YesPlease
>>> +     FREAD_READS_DIRECTORIES = UnfortunatelyYes
>>> endif
>> 
>> I wonder why we set up this knob this way.  A lot of operating systems
>> support fopen(..., "r") of a directory --- wouldn't it make sense for
>> FREAD_READS_DIRECTORIES to be the default and for users on stricter
>> platforms to be able to set FREAD_DOES_NOT_READ_DIRECTORIES if they
>> want to speed Git up by taking advantage of their saner fread?
> 
> At the time it was written, the assumption in the code was that an
> fread() on a directory would produce a failure, and that that was the
> sane and common behavior. fopen(..., "r") on a directory was expected
> to be successful on most platforms, but does fail on some. I don't
> recall if it failed on any of the platforms I had access to at the
> time (Solaris, IRIX), but it does fail on Windows. So I introduced
> this feature that would make fopen() fail when opening a directory for
> use on the platforms where fread() of a directory did not fail,
> instead of trying to wrap fread().
> 
> I just looked in config.mak.uname, and I'm surprised to see
> FREAD_READS_DIRECTORIES set for so many platforms. And it's set for
> Linux and Darwin?!?!? Junio added it for Darwin
> (8e178ec4d072da4cd8f4449e17aef3aff5b57f6a) and Nguyễn Thái Ngọc Duy
> added it for Linux (e2d90fd1c33ae57e4a6da5729ae53876107b3463), but
> also seemed to mistake the intention of FREAD_FREADS_DIRECTORIES as
> being about the fopen(..., "r") of a directory rather than about an
> fread() of a directory.
> 
> I just wrote a test program and tested on Linux, Darwin, and Windows.
> Linux and Darwin both succeed to fopen() a directory and fail to
> fread() it, as expected. Windows fails to fopen() a directory.
> 
> I notice this earlier commit mentions a failure of t1308
> (4e3ecbd43958b1400d6cb85fe5529beda1630e3a). I wonder if this is the
> reason FREAD_READS_DIRECTORIES was added to so many platforms?
Then the current autoconf test is wrong and likely causing confusion:
Show 8 quoted lines
> AC_RUN_IFELSE(
>         [AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
>                 [[
>                 FILE *f = fopen(".", "r");
>                 return f != NULL;]])],
>         [ac_cv_fread_reads_directories=no],
>         [ac_cv_fread_reads_directories=yes])
> ])
Jess
Previous: Brandon CaseyNext: Brandon Casey
Message 5 of 12 in “config.mak.uname: Define FREAD_READS_DIRECTORIES for GNU/Hurd”
  1. config.mak.uname: Define FREAD_READS_DIRECTORIES for GNU/HurdJessica Clarke, Apr 22, 2020
  2. Jonathan NiederApr 22, 2020
  3. Junio C HamanoApr 22, 2020
  4. Brandon CaseyApr 22, 2020
  5. Jessica ClarkeApr 22, 2020
  6. Brandon CaseyApr 22, 2020
  7. Brandon CaseyApr 22, 2020
  8. Brandon CaseyApr 22, 2020
  9. Jeff KingApr 22, 2020
  10. Brandon CaseyApr 22, 2020
  11. Jeff KingApr 24, 2020
  12. Junio C HamanoApr 22, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.