From: Paul Eggert Date: Mon, 20 Mar 2023 19:00:22 GMT Subject: Re: [PATCH 2/2] git-compat-util: use gettimeofday for current time Message-ID: <047178a8-ccf5-1cab-e670-8f1c64f9ca3c@cs.ucla.edu> In-Reply-To: On 3/20/23 10:01, Junio C Hamano wrote: >> I however wonder if we should follow our >> usual pattern of implementing git_time() with the identical function >> signature as what we replace (i.e. system's time()), and #undef/#define >> the symbol we replace with git_time, though. Wouldn't it make [1/2] >> a lot smaller and future-proof? Yes, something like that would work too. (Sorry, I didn't know about the usual pattern.) > +# Define OVERRIDE_TIME to override time(2) and replace it with an > +# implementation based on gettimeofday(2). THis is necessary when > +# glibc 2.31+ on Linux is used, where in the first 1 to 2.5 ms of > +# every second, time(NULL) returns a value that is one less than the > +# tv_sec part of higher-resolution timestamps used in the file system. THis -> This It might be simpler to use the gettimeofday workaround on all platforms, rather than having an OVERRIDE_TIME flag and complicating config.mak.uname. gettimeofday should be portable, as it's already used elsewhere in Git without configury. If we're going with the more-complicated solution, config.mak.uname will need changes in its AIX and MS-Windows sections because the problem is known to occur there too. Although AIX configuration is simple, I'm not sure how to go about the MS-Windows part as there seem to be a lot of ifdefs there. Also, because the time problem does not occur with musl libc (used in Alpine Linux 3.17), on the Linux side the workaround could be employed only if glibc 2.31+ is in use.