+2007-01-17 Bruno Haible <bruno@clisp.org>
+
+ * lib/gettimeofday.c (gettimeofday): Add code for the case
+ HAVE_GETTIMEOFDAY && !GETTIMEOFDAY_CLOBBERS_LOCALTIME. Use the
+ maximum possible value for tv->tv_usec, rather than the minimum one.
+
2005-10-08 Martin Lambers <marlam@marlam.de>
2005-10-08 Paul Eggert <eggert@cs.ucla.edu>
2007-01-16 Bruno Haible <bruno@clisp.org>
#endif
-/* This is a wrapper for gettimeofday.
- It is used only on systems that lack this function, or for whose
+/* This is a wrapper for gettimeofday.
+ It is used only on systems that lack this function, or for whose
implementation of this function causes problems. */
int
#undef gettimeofday
{
#if HAVE_GETTIMEOFDAY
+ extern int gettimeofday (/* unspecified arguments */);
# if GETTIMEOFDAY_CLOBBERS_LOCALTIME
extern struct tm *localtime (const time_t *);
- extern int gettimeofday (/* unspecified arguments */);
/* Save and restore the contents of the buffer used for localtime's result
around the call to gettimeofday. */
return result;
+# else
+
+ return gettimeofday (tv, tz);
+
# endif
#else
+
+ /* The clock does not have microsecond resolution, so get the maximum
+ possible value for the current time that is consistent with the
+ reported clock. That way, files are not considered to be in the
+ future merely because their time stamps have higher resolution
+ than the clock resolution. */
+
# if HAVE__FTIME
struct _timeb timebuf;
-
+
_ftime (&timebuf);
tv->tv_sec = timebuf.time;
- tv->tv_usec = timebuf.millitm * 1000;
+ tv->tv_usec = timebuf.millitm * 1000 + 999;
return 0;
# else
time_t t = time (NULL);
-
+
if (t == (time_t) -1)
return -1;
tv->tv_sec = t;
- tv->tv_usec = 0;
+ tv->tv_usec = 999999;
return 0;