aboutsummaryrefslogtreecommitdiff
path: root/time/mktime.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2003-12-31 23:58:57 +0000
committerRoland McGrath <roland@gnu.org>2003-12-31 23:58:57 +0000
commit7683e1407806ece4c6927866587c3359ee247f7d (patch)
treeb4ecd2db31603a9cf3bb974362a17fd3ff98e193 /time/mktime.c
parenta4e2a16911ed9c0ed353ba81970324b8e6de7c1c (diff)
downloadglibc-7683e1407806ece4c6927866587c3359ee247f7d.zip
glibc-7683e1407806ece4c6927866587c3359ee247f7d.tar.gz
glibc-7683e1407806ece4c6927866587c3359ee247f7d.tar.bz2
* time/mktime.c: (my_mktime_localtime_r):
Remove. All uses changed to __localtime_r. (__localtime_r) [!defined _LIBC]: New macro. Include "time_r.h" to get its implementation. Fix compile-command to allow for TIME_R_POSIX. * time/strftime.c (my_strftime_gmtime_r, my_strftime_localtime_r): Remove. All uses changed to __localtime_r and __gmtime_r. (__gmtime_r, __localtime_r) [!HAVE_TM_GMTOFF]: New macros. Include "time_r.h" to get their implementations. * time/timegm.c: Allow use in GNU applications outside glibc. [defined HAVE_CONFIG_H]: Include <config.h>. [!defined _LIBC]: Include "timegm.h", <time_r.h>. Define __gmtime_r, and declare __mktime_internal. (timegm): Define via a prototype, since we can safely assume C89 now.
Diffstat (limited to 'time/mktime.c')
-rw-r--r--time/mktime.c32
1 files changed, 11 insertions, 21 deletions
diff --git a/time/mktime.c b/time/mktime.c
index e801928..136984b 100644
--- a/time/mktime.c
+++ b/time/mktime.c
@@ -84,22 +84,15 @@ const unsigned short int __mon_yday[2][13] =
};
-#ifdef _LIBC
-# define my_mktime_localtime_r __localtime_r
-#else
-/* If we're a mktime substitute in a GNU program, then prefer
- localtime to localtime_r, since many localtime_r implementations
- are buggy. */
-static struct tm *
-my_mktime_localtime_r (const time_t *t, struct tm *tp)
-{
- struct tm *l = localtime (t);
- if (! l)
- return 0;
- *tp = *l;
- return tp;
-}
-#endif /* ! _LIBC */
+#ifndef _LIBC
+/* Portable standalone applications should supply a "time_r.h" that
+ declares a POSIX-compliant localtime_r, for the benefit of older
+ implementations that lack localtime_r or have a nonstandard one.
+ See the gnulib time_r module for one way to implement this. */
+# include "time_r.h"
+# undef __localtime_r
+# define __localtime_r localtime_r
+#endif
/* Yield the difference between (YEAR-YDAY HOUR:MIN:SEC) and (*TP),
@@ -188,9 +181,6 @@ ranged_convert (struct tm *(*convert) (const time_t *, struct tm *),
Use *OFFSET to keep track of a guess at the offset of the result,
compared to what the result would be for UTC without leap seconds.
If *OFFSET's guess is correct, only one CONVERT call is needed. */
-#ifndef _LIBC
-static
-#endif
time_t
__mktime_internal (struct tm *tp,
struct tm *(*convert) (const time_t *, struct tm *),
@@ -376,7 +366,7 @@ mktime (struct tm *tp)
__tzset ();
#endif
- return __mktime_internal (tp, my_mktime_localtime_r, &localtime_offset);
+ return __mktime_internal (tp, __localtime_r, &localtime_offset);
}
#ifdef weak_alias
@@ -525,6 +515,6 @@ main (int argc, char **argv)
/*
Local Variables:
-compile-command: "gcc -DDEBUG -Wall -W -O -g mktime.c -o mktime"
+compile-command: "gcc -DDEBUG -DHAVE_TIME_R_POSIX -Wall -W -O -g mktime.c -o mktime"
End:
*/