1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-07 06:43:00 +03:00

* 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.
This commit is contained in:
Roland McGrath
2003-12-31 23:58:57 +00:00
parent a4e2a16911
commit 7683e14078
4 changed files with 67 additions and 62 deletions

View File

@@ -4,6 +4,23 @@
2003-12-30 Paul Eggert <eggert@twinsun.com> 2003-12-30 Paul Eggert <eggert@twinsun.com>
* 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.
* time/mktime.c (check_result): Use less-confusing report format. * time/mktime.c (check_result): Use less-confusing report format.
"long" -> "long int", as per usual GNU style. "long" -> "long int", as per usual GNU style.
(main): Likewise. (main): Likewise.

View File

@@ -84,22 +84,15 @@ const unsigned short int __mon_yday[2][13] =
}; };
#ifdef _LIBC #ifndef _LIBC
# define my_mktime_localtime_r __localtime_r /* Portable standalone applications should supply a "time_r.h" that
#else declares a POSIX-compliant localtime_r, for the benefit of older
/* If we're a mktime substitute in a GNU program, then prefer implementations that lack localtime_r or have a nonstandard one.
localtime to localtime_r, since many localtime_r implementations See the gnulib time_r module for one way to implement this. */
are buggy. */ # include "time_r.h"
static struct tm * # undef __localtime_r
my_mktime_localtime_r (const time_t *t, struct tm *tp) # define __localtime_r localtime_r
{ #endif
struct tm *l = localtime (t);
if (! l)
return 0;
*tp = *l;
return tp;
}
#endif /* ! _LIBC */
/* Yield the difference between (YEAR-YDAY HOUR:MIN:SEC) and (*TP), /* 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, 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. compared to what the result would be for UTC without leap seconds.
If *OFFSET's guess is correct, only one CONVERT call is needed. */ If *OFFSET's guess is correct, only one CONVERT call is needed. */
#ifndef _LIBC
static
#endif
time_t time_t
__mktime_internal (struct tm *tp, __mktime_internal (struct tm *tp,
struct tm *(*convert) (const time_t *, struct tm *), struct tm *(*convert) (const time_t *, struct tm *),
@@ -376,7 +366,7 @@ mktime (struct tm *tp)
__tzset (); __tzset ();
#endif #endif
return __mktime_internal (tp, my_mktime_localtime_r, &localtime_offset); return __mktime_internal (tp, __localtime_r, &localtime_offset);
} }
#ifdef weak_alias #ifdef weak_alias
@@ -525,6 +515,6 @@ main (int argc, char **argv)
/* /*
Local Variables: 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: End:
*/ */

View File

@@ -167,44 +167,22 @@ extern char *tzname[];
#ifdef _LIBC #ifdef _LIBC
# define my_strftime_gmtime_r __gmtime_r
# define my_strftime_localtime_r __localtime_r
# define tzname __tzname # define tzname __tzname
# define tzset __tzset # define tzset __tzset
#else #endif
/* If we're a strftime substitute in a GNU program, then prefer gmtime #if !HAVE_TM_GMTOFF
to gmtime_r, since many gmtime_r implementations are buggy. /* Portable standalone applications should supply a "time_r.h" that
Similarly for localtime_r. */ declares a POSIX-compliant localtime_r, for the benefit of older
implementations that lack localtime_r or have a nonstandard one.
# if ! HAVE_TM_GMTOFF Similarly for gmtime_r. See the gnulib time_r module for one way
static struct tm *my_strftime_gmtime_r __P ((const time_t *, struct tm *)); to implement this. */
static struct tm * # include "time_r.h"
my_strftime_gmtime_r (t, tp) # undef __gmtime_r
const time_t *t; # undef __localtime_r
struct tm *tp; # define __gmtime_r gmtime_r
{ # define __localtime_r localtime_r
struct tm *l = gmtime (t); #endif
if (! l)
return 0;
*tp = *l;
return tp;
}
# endif /* ! HAVE_TM_GMTOFF */
static struct tm *my_strftime_localtime_r __P ((const time_t *, struct tm *));
static struct tm *
my_strftime_localtime_r (t, tp)
const time_t *t;
struct tm *tp;
{
struct tm *l = localtime (t);
if (! l)
return 0;
*tp = *l;
return tp;
}
#endif /* ! defined _LIBC */
#if !defined memset && !defined HAVE_MEMSET && !defined _LIBC #if !defined memset && !defined HAVE_MEMSET && !defined _LIBC
@@ -1388,7 +1366,7 @@ my_strftime (s, maxsize, format, tp ut_argument LOCALE_PARAM)
occurred. */ occurred. */
struct tm tm; struct tm tm;
if (! my_strftime_localtime_r (&lt, &tm) if (! __localtime_r (&lt, &tm)
|| ((ltm.tm_sec ^ tm.tm_sec) || ((ltm.tm_sec ^ tm.tm_sec)
| (ltm.tm_min ^ tm.tm_min) | (ltm.tm_min ^ tm.tm_min)
| (ltm.tm_hour ^ tm.tm_hour) | (ltm.tm_hour ^ tm.tm_hour)
@@ -1398,7 +1376,7 @@ my_strftime (s, maxsize, format, tp ut_argument LOCALE_PARAM)
break; break;
} }
if (! my_strftime_gmtime_r (&lt, &gtm)) if (! __gmtime_r (&lt, &gtm))
break; break;
diff = tm_diff (&ltm, &gtm); diff = tm_diff (&ltm, &gtm);

View File

@@ -1,4 +1,6 @@
/* Copyright (C) 1994, 1997 Free Software Foundation, Inc. /* Convert UTC calendar time to simple time. Like mktime but assumes UTC.
Copyright (C) 1994, 1997, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@@ -16,11 +18,29 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */ 02111-1307 USA. */
#include <time.h> #ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#ifdef _LIBC
# include <time.h>
#else
# include "timegm.h"
/* Portable standalone applications should supply a "time_r.h" that
declares a POSIX-compliant gmtime_r, for the benefit of older
implementations that lack gmtime_r or have a nonstandard one.
See the gnulib time_r module for one way to implement this. */
# include <time_r.h>
# undef __gmtime_r
# define __gmtime_r gmtime_r
time_t __mktime_internal (struct tm *,
struct tm * (*) (time_t const *, struct tm *),
time_t *);
#endif
time_t time_t
timegm (tmp) timegm (struct tm *tmp)
struct tm *const tmp;
{ {
static time_t gmtime_offset; static time_t gmtime_offset;
tmp->tm_isdst = 0; tmp->tm_isdst = 0;