2008/5/7 Junio C Hamano [off-list ref]:
Brandon Casey [off-list ref] writes:
> Mike Ralphson wrote:
>> 2008/5/7 Brandon Casey [off-list ref]:
>>> Johannes Sixt wrote:
>>> > The #define fopen in git-compat-util.h essentially defeats the effect of
>>> > _LARGE_FILES as far as fopen() calls are concerned: If
>>> > FREAD_READS_DIRECTORIES is not defined, fopen() would be redirected to
>>> > fopen64(), but when it is defined, it is redirected to git_fopen(), which
>>> > in turn uses fopen() instead of fopen64() (due to the #undef in
>>> > compat/fopen.c).
>>> >
>>>
>>> How about something like this?
>>>
>>> diff --git a/compat/fopen.c b/compat/fopen.c
>>> index ccb9e89..70b0d4d 100644
>>> --- a/compat/fopen.c
>>> +++ b/compat/fopen.c
>>> @@ -1,5 +1,5 @@
>>> +#undef FREAD_READS_DIRECTORIES
>>> #include "../git-compat-util.h"
>>> -#undef fopen
>>> FILE *git_fopen(const char *path, const char *mode)
>>> {
>>> FILE *fp;
>>>
>>>
>>> -brandon
>>>
>>
>> Ta. I still get all the warnings with that, was that what you were
>> trying to solve? The 64 bit specific tests in t5302 do still pass.
>
> Ah, yes. You would still get the warnings for every other file that
> includes git-compat-util.h, except compat/fopen.c. I didn't think
> about all of those. :) In this case those are indeed harmless. And now
> the git provided git_fopen() will use the compiler selected fopen()
> which should avoid any of the gotchas that Hannes brought up.
In any case, that #undef then #include dance needs a big comment on why it
has to be so.
Indeed. Please add ascii-art diagrams and don't use long words. I may
then have a chance of understanding how this works, and how I should
have spotted 5 potentially non-harmless warnings among 400 noise ones,
when all I did was get the testsuite from non-passing to passing! 8-)
In reality, thanks to all for pitching in.
Mike