Update.
2004-08-09  Ulrich Drepper  <drepper@redhat.com>

	* time/tzset.c (tzset_internal): If TZ is not set do not compare
	old and new tz value since it might be /etc/localtime in both
	cases although the file changed.  [BZ #154]
	Patch by Christian Franke <franke@computer.org>.

	* time/tzfile.c (__tzfile_read): Determine dev/ino of file.
	Compare with values of previously opened file.  Don't do anything
	is they match.
This commit is contained in:
Ulrich Drepper 2004-08-09 07:24:19 +00:00
parent c14e91352e
commit fe6cc2ae09
3 changed files with 39 additions and 4 deletions

View File

@ -1,3 +1,14 @@
2004-08-09 Ulrich Drepper <drepper@redhat.com>
* time/tzset.c (tzset_internal): If TZ is not set do not compare
old and new tz value since it might be /etc/localtime in both
cases although the file changed. [BZ #154]
Patch by Christian Franke <franke@computer.org>.
* time/tzfile.c (__tzfile_read): Determine dev/ino of file.
Compare with values of previously opened file. Don't do anything
is they match.
2004-08-08 Ulrich Drepper <drepper@redhat.com>
* elf/dl-load.c (_dl_map_object): If __RTLD_CALLMAP flag is set,

View File

@ -24,11 +24,14 @@
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <sys/stat.h>
#define NOID
#include <timezone/tzfile.h>
int __use_tzfile;
static dev_t tzfile_dev;
static ino64_t tzfile_ino;
struct ttinfo
{
@ -97,6 +100,7 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
size_t total_size;
size_t types_idx;
size_t leaps_idx;
int was_using_tzfile = __use_tzfile;
__use_tzfile = 0;
@ -154,6 +158,25 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
if (f == NULL)
return;
/* Get information about the file. */
struct stat64 st;
if (fstat64 (fileno (f), &st) != 0)
{
fclose (f);
return;
}
if (was_using_tzfile && tzfile_ino == st.st_ino && tzfile_dev == st.st_dev)
{
/* It's the same file. No further work needed. */
fclose (f);
__use_tzfile = 1;
return;
}
/* Remember the inode and device number. */
tzfile_dev = st.st_dev;
tzfile_ino = st.st_ino;
/* No threads reading this stream. */
__fsetlocking (f, FSETLOCKING_BYCALLER);

View File

@ -159,10 +159,7 @@ tzset_internal (always)
/* Examine the TZ environment variable. */
tz = getenv ("TZ");
if (tz == NULL)
/* No user specification; use the site-wide default. */
tz = TZDEFAULT;
else if (*tz == '\0')
if (tz && *tz == '\0')
/* User specified the empty string; use UTC explicitly. */
tz = "Universal";
@ -177,6 +174,10 @@ tzset_internal (always)
/* No change, simply return. */
return;
if (tz == NULL)
/* No user specification; use the site-wide default. */
tz = TZDEFAULT;
tz_rules[0].name = NULL;
tz_rules[1].name = NULL;