diff options
author | Ulrich Drepper <drepper@redhat.com> | 1996-12-30 01:47:46 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1996-12-30 01:47:46 +0000 |
commit | d38cd08ca397c59fc98dba8c4d0b4bd96c899c9e (patch) | |
tree | 46ffb93f070ec805f4288ef6cdb379ba0e6ae621 /time/localtime.c | |
parent | 01c901a56b165e57a17db349cc110f84f1b839c7 (diff) | |
download | glibc-d38cd08ca397c59fc98dba8c4d0b4bd96c899c9e.zip glibc-d38cd08ca397c59fc98dba8c4d0b4bd96c899c9e.tar.gz glibc-d38cd08ca397c59fc98dba8c4d0b4bd96c899c9e.tar.bz2 |
update from main archive 961229cvs/libc20x-970306cvs/libc-961231cvs/libc-961230
Mon Dec 30 01:32:59 1996 Ulrich Drepper <drepper@cygnus.com>
* tme/localtime.c: Rewrite so that localtime_r does not call tzset,
but localtime does.
* features.h: Rename ANSI C to ISO C.
Mention __GLIBC__ and __GLIBC_MINOR__ macros.
* gnu-versions.h: Add _GNU_GETOPT_INTERFACE_VERSION.
* posix/getopt.c: Use _GNU_GETOPT_INTERFACE_VERSION to check
whether we can elide the code.
* posix/getopt1.c: Likewise.
* posix/Makefile: Correct copyright.
* elf/dl-error.c (_dl_catch_error): Clear `catch' also when error
occurred.
* elf/dl-support.c (_dl_sysdep_open_zero_fill): Don't define if
MAP_ANON is defined.
* elf/eval.c: Use __getline instead of getline.
* elf/rtld.c (dl_main): Check return value of _dl_new_object
function for NULL.
* sysdeps/generic/dl-cache.c: Update copyright.
* signal/Makefile: Correct copyright.
(routines): Remove gsignal and ssignal. Add bsd_signal.
* signal/gsignal.c: Removed. Now is made an alias.
* signal/ssignal.c: Likewise.
* sysdeps/posix/raise.c: Add alias gsignal.
* sysdeps/stub/raise.c: Likewise.
* sysdeps/posix/signal.c: Add alias ssignal.
* sysdeps/stub/signal.c: Likewise.
* signal/signal.h: Declare bsd_signal. Define signal as bsd_signal
if __FAVOR_BSD.
* sysdeps/posix/bsd_signal.c: New file. Implementation of XPG
function.
* sysdeps/unix/sysv/linux/signal.c: Add explanation.
* socket/sys/un.h: Define SUN_LEN according to POSIX.1g.
* stdio-common/Makefile (tests): Add scanf10.
* stdio-common/scanf10.c: New file.
* stdio-common/vfscanf.c: Decrement counter if EOF is read while
reading string.
* sysdeps/libm-i387/e_acos.S: Use END, not PSEUDO_END.
* sysdeps/libm-i387/e_acosl.S: Likewise.
* sysdeps/libm-i387/e_asin.S: Likewise.
* sysdeps/libm-i387/e_asinl.S: Likewise.
* sysdeps/libm-i387/e_atan2.S: Likewise.
* sysdeps/libm-i387/e_atan2f.S: Likewise.
* sysdeps/libm-i387/e_atan2l.S: Likewise.
* sysdeps/libm-i387/e_exp.S: Likewise.
* sysdeps/libm-i387/e_expl.S: Likewise.
* sysdeps/libm-i387/e_fmod.S: Likewise.
* sysdeps/libm-i387/e_fmodl.S: Likewise.
* sysdeps/libm-i387/e_log.S: Likewise.
* sysdeps/libm-i387/e_log10.S: Likewise.
* sysdeps/libm-i387/e_log10l.S: Likewise.
* sysdeps/libm-i387/e_logl.S: Likewise.
* sysdeps/libm-i387/e_remainder.S: Likewise.
* sysdeps/libm-i387/e_remainderf.S: Likewise.
* sysdeps/libm-i387/e_remainderl.S: Likewise.
* sysdeps/libm-i387/e_scalb.S: Likewise.
* sysdeps/libm-i387/e_scalbl.S: Likewise.
* sysdeps/libm-i387/e_sqrt.S: Likewise.
* sysdeps/libm-i387/e_sqrtf.S: Likewise.
* sysdeps/libm-i387/e_sqrtl.S: Likewise.
* sysdeps/libm-i387/s_atan.S: Likewise.
* sysdeps/libm-i387/s_atanf.S: Likewise.
* sysdeps/libm-i387/s_atanl.S: Likewise.
* sysdeps/libm-i387/s_ceil.S: Likewise.
* sysdeps/libm-i387/s_ceilf.S: Likewise.
* sysdeps/libm-i387/s_ceill.S: Likewise.
* sysdeps/libm-i387/s_copysign.S: Likewise.
* sysdeps/libm-i387/s_copysignf.S: Likewise.
* sysdeps/libm-i387/s_copysignl.S: Likewise.
* sysdeps/libm-i387/s_cos.S: Likewise.
* sysdeps/libm-i387/s_cosf.S: Likewise.
* sysdeps/libm-i387/s_cosl.S: Likewise.
* sysdeps/libm-i387/s_finite.S: Likewise.
* sysdeps/libm-i387/s_finitef.S: Likewise.
* sysdeps/libm-i387/s_finitel.S: Likewise.
* sysdeps/libm-i387/s_floor.S: Likewise.
* sysdeps/libm-i387/s_floorf.S: Likewise.
* sysdeps/libm-i387/s_floorl.S: Likewise.
* sysdeps/libm-i387/s_ilogb.S: Likewise.
* sysdeps/libm-i387/s_ilogbf.S: Likewise.
* sysdeps/libm-i387/s_ilogbl.S: Likewise.
* sysdeps/libm-i387/s_log1p.S: Likewise.
* sysdeps/libm-i387/s_log1pf.S: Likewise.
* sysdeps/libm-i387/s_log1pl.S: Likewise.
* sysdeps/libm-i387/s_logb.S: Likewise.
* sysdeps/libm-i387/s_logbf.S: Likewise.
* sysdeps/libm-i387/s_logbl.S: Likewise.
* sysdeps/libm-i387/s_rint.S: Likewise.
* sysdeps/libm-i387/s_rintf.S: Likewise.
* sysdeps/libm-i387/s_rintl.S: Likewise.
* sysdeps/libm-i387/s_scalbn.S: Likewise.
* sysdeps/libm-i387/s_scalbnf.S: Likewise.
* sysdeps/libm-i387/s_scalbnl.S: Likewise.
* sysdeps/libm-i387/s_significand.S: Likewise.
* sysdeps/libm-i387/s_significandf.S: Likewise.
* sysdeps/libm-i387/s_significandl.S: Likewise.
* sysdeps/libm-i387/s_sin.S: Likewise.
* sysdeps/libm-i387/s_sinf.S: Likewise.
* sysdeps/libm-i387/s_sinl.S: Likewise.
* sysdeps/libm-i387/e_log.S: Use fyl2xp1 instruction for values
near 1 to increase precision.
* sysdeps/libm-i387/e_log10.S: Likewise.
* sysdeps/libm-i387/e_log10l.S: Likewise.
* sysdeps/libm-i387/e_logl.S: Likewise.
* sysdeps/libm-i387/s_cos.S: Use testl instead of andw.
* sysdeps/libm-i387/s_cosl.S: Likewise.
* sysdeps/libm-i387/s_sin.S: Likewise.
* sysdeps/libm-i387/s_sinl.S: Likewise.
* sysdeps/libm-i387/s_tan.S: Likewise.
* sysdeps/libm-i387/s_tanl.S: Likewise.
* sysdeps/libm-i387/e_acosf.S: New file. Add float versions.
* sysdeps/libm-i387/e_asinf.S: Likewise.
* sysdeps/libm-i387/e_expf.S: Likewise.
* sysdeps/libm-i387/e_fmodf.S: Likewise.
* sysdeps/libm-i387/e_log10f.S: Likewise.
* sysdeps/libm-i387/e_logf.S: Likewise.
* sysdeps/libm-i387/e_scalbf.S: Likewise.
* sysdeps/libm-i387/e_acosh.S: New file. Highly optimized versions.
* sysdeps/libm-i387/e_acoshf.S: Likewise.
* sysdeps/libm-i387/e_acoshl.S: Likewise.
* sysdeps/libm-i387/e_atanh.S: Likewise.
* sysdeps/libm-i387/e_atanhf.S: Likewise.
* sysdeps/libm-i387/e_atanhl.S: Likewise.
* sysdeps/libm-i387/e_asinh.S: Likewise.
* sysdeps/libm-i387/e_asinhf.S: Likewise.
* sysdeps/libm-i387/e_asinhl.S: Likewise.
* sysdeps/libm-ieee754/s_asinhf.c: Tweak a bit. Use lower levels
for simplified handling.
* sysdeps/unix/sysv/linux/syscalls.list: Add query_module.
Sun Dec 22 01:39:29 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* inet/rcmd.c (rcmd): Set h_errno before calling herror.
* inet/rexec.c (rexec): Likewise.
Sat Dec 21 21:47:08 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/m68k/setjmp.c (__setjmp): Make it really
compatible.
Sun Dec 22 03:23:33 1996 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/libm-i387/s_log1p.S: Use fyl2xp1 for numbers in range
-0.29 <= x <= 0.29, otherwise the old method.
* sysdeps/libm-i387/s_log1pf.S: Likewise.
* sysdeps/libm-i387/s_log1pl.S: Likewise.
Diffstat (limited to 'time/localtime.c')
-rw-r--r-- | time/localtime.c | 78 |
1 files changed, 52 insertions, 26 deletions
diff --git a/time/localtime.c b/time/localtime.c index 5e1dd0a..f228776 100644 --- a/time/localtime.c +++ b/time/localtime.c @@ -1,4 +1,4 @@ -/* localtime -- convert `time_t' to `struct tm' in local time zone +/* Convert `time_t' to `struct tm' in local time zone. Copyright (C) 1991, 92, 93, 95, 96 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -26,29 +26,22 @@ struct tm _tmbuf; /* Prototype for the internal function to get information based on TZ. */ extern void __tzset_internal __P ((void)); +extern int __tz_compute __P ((time_t timer, struct tm *tp)); +extern int __tzfile_compute __P ((time_t timer, + long int *leap_correct, int *leap_hit)); +extern int __use_tzfile; -/* Return the `struct tm' representation of *TIMER in the local timezone. */ -struct tm * -localtime (timer) - const time_t *timer; -{ - return __localtime_r (timer, &_tmbuf); -} +/* This lock is defined in tzset.c and locks all the data defined there + and in tzfile.c; the internal functions do no locking themselves. + This lock is only taken here and in `tzset'. */ +__libc_lock_define (extern, __tzset_lock) -struct tm * -__localtime_r (timer, tp) - const time_t *timer; - struct tm *tp; + +/* Return the `struct tm' representation of *TIMER in the local timezone. */ +static struct tm * +localtime_internal (const time_t *timer, struct tm *tp) { - /* This lock is defined in tzset.c and locks all the data defined there - and in tzfile.c; the internal functions do no locking themselves. - This lock is only taken here and in `tzset'. */ - __libc_lock_define (extern, __tzset_lock) - extern int __use_tzfile; - extern int __tz_compute __P ((time_t timer, struct tm *tp)); - extern int __tzfile_compute __P ((time_t timer, - long int *leap_correct, int *leap_hit)); long int leap_correction; int leap_extra_secs; @@ -58,11 +51,6 @@ __localtime_r (timer, tp) return NULL; } - __libc_lock_lock (__tzset_lock); - - /* Make sure the database is initialized. */ - __tzset_internal (); - if (__use_tzfile) { if (! __tzfile_compute (*timer, &leap_correction, &leap_extra_secs)) @@ -86,8 +74,46 @@ __localtime_r (timer, tp) tp->tm_zone = __tzname[__daylight]; } + return tp; +} + + +/* POSIX.1 8.3.7.2 says that localtime_r is not required to set + tzname. This is a good idea since this allows at least a bit more + parallelism. */ + +struct tm * +localtime (timer) + const time_t *timer; +{ + struct tm *result; + + __libc_lock_lock (__tzset_lock); + + /* Make sure the database is initialized. */ + __tzset_internal (); + + result = localtime_internal (timer, &_tmbuf); + __libc_lock_unlock (__tzset_lock); - return tp; + return result; +} + + +struct tm * +__localtime_r (timer, tp) + const time_t *timer; + struct tm *tp; +{ + struct tm *result; + + __libc_lock_lock (__tzset_lock); + + result = localtime_internal (timer, tp); + + __libc_lock_unlock (__tzset_lock); + + return result; } weak_alias (__localtime_r, localtime_r) |