Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/commands/variable.c108
-rw-r--r--src/backend/postmaster/syslogger.c6
-rw-r--r--src/backend/utils/adt/datetime.c5
-rw-r--r--src/backend/utils/adt/nabstime.c6
-rw-r--r--src/backend/utils/adt/timestamp.c4
5 files changed, 38 insertions, 91 deletions
diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c
index 7add658d6ab..e7762040626 100644
--- a/src/backend/commands/variable.c
+++ b/src/backend/commands/variable.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/commands/variable.c,v 1.105 2004/12/31 21:59:42 pgsql Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/variable.c,v 1.106 2005/04/19 03:13:58 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -315,13 +315,13 @@ assign_timezone(const char *value, bool doit, GucSource source)
* UNKNOWN as the canonical spelling.
*
* During GUC initialization, since the timezone library isn't
- * set up yet, pg_get_current_timezone will return NULL and we
+ * set up yet, pg_get_timezone_name will return NULL and we
* will leave the setting as UNKNOWN. If this isn't
* overridden from the config file then
* pg_timezone_initialize() will eventually select a default
* value from the environment.
*/
- const char *curzone = pg_get_current_timezone();
+ const char *curzone = pg_get_timezone_name(global_timezone);
if (curzone)
value = curzone;
@@ -329,90 +329,36 @@ assign_timezone(const char *value, bool doit, GucSource source)
else
{
/*
- * Otherwise assume it is a timezone name.
- *
- * We have to actually apply the change before we can have any
- * hope of checking it. So, save the old value in case we
- * have to back out. We have to copy since
- * pg_get_current_timezone returns a pointer to its static
- * state.
- *
- * This would all get a lot simpler if the TZ library had a
- * better API that would let us look up and test a timezone
- * name without making it the default.
+ * Otherwise assume it is a timezone name, and try to load it.
*/
- const char *cur_tz;
- char *save_tz;
- bool known,
- acceptable;
+ pg_tz *new_tz;
- cur_tz = pg_get_current_timezone();
- if (cur_tz)
- save_tz = pstrdup(cur_tz);
- else
- save_tz = NULL;
+ new_tz = pg_tzset(value);
- known = pg_tzset(value);
- acceptable = known ? tz_acceptable() : false;
+ if (!new_tz)
+ {
+ ereport((source >= PGC_S_INTERACTIVE) ? ERROR : LOG,
+ (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+ errmsg("unrecognized time zone name: \"%s\"",
+ value)));
+ return NULL;
+ }
- if (doit && known && acceptable)
+ if (!tz_acceptable(new_tz))
{
- /* Keep the changed TZ */
- HasCTZSet = false;
+ ereport((source >= PGC_S_INTERACTIVE) ? ERROR : LOG,
+ (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+ errmsg("time zone \"%s\" appears to use leap seconds",
+ value),
+ errdetail("PostgreSQL does not support leap seconds.")));
+ return NULL;
}
- else
+
+ if (doit)
{
- /*
- * Revert to prior TZ setting; note we haven't changed
- * HasCTZSet in this path, so if we were previously using
- * a fixed offset, we still are.
- */
- if (save_tz)
- pg_tzset(save_tz);
- else
- {
- /*
- * TZ library wasn't initialized yet. Annoyingly, we
- * will come here during startup because guc-file.l
- * checks the value with doit = false before actually
- * applying. The best approach seems to be as follows:
- *
- * 1. known && acceptable: leave the setting in place,
- * since we'll apply it soon anyway. This is mainly
- * so that any log messages printed during this
- * interval are timestamped with the user's requested
- * timezone.
- *
- * 2. known && !acceptable: revert to GMT for lack of any
- * better idea. (select_default_timezone() may get
- * called later to undo this.)
- *
- * 3. !known: no need to do anything since TZ library did
- * not change its state.
- *
- * Again, this should all go away sometime soon.
- */
- if (known && !acceptable)
- pg_tzset("GMT");
- }
- /* Complain if it was bad */
- if (!known)
- {
- ereport((source >= PGC_S_INTERACTIVE) ? ERROR : LOG,
- (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("unrecognized time zone name: \"%s\"",
- value)));
- return NULL;
- }
- if (!acceptable)
- {
- ereport((source >= PGC_S_INTERACTIVE) ? ERROR : LOG,
- (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("time zone \"%s\" appears to use leap seconds",
- value),
- errdetail("PostgreSQL does not support leap seconds.")));
- return NULL;
- }
+ /* Save the changed TZ */
+ global_timezone = new_tz;
+ HasCTZSet = false;
}
}
}
@@ -459,7 +405,7 @@ show_timezone(void)
IntervalPGetDatum(&interval)));
}
else
- tzn = pg_get_current_timezone();
+ tzn = pg_get_timezone_name(global_timezone);
if (tzn != NULL)
return tzn;
diff --git a/src/backend/postmaster/syslogger.c b/src/backend/postmaster/syslogger.c
index d019127c790..1899d8f21a1 100644
--- a/src/backend/postmaster/syslogger.c
+++ b/src/backend/postmaster/syslogger.c
@@ -18,7 +18,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.14 2005/03/12 01:54:44 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.15 2005/04/19 03:13:59 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -833,7 +833,7 @@ logfile_getname(pg_time_t timestamp)
if (strchr(Log_filename, '%'))
{
/* treat it as a strftime pattern */
- tm = pg_localtime(&timestamp);
+ tm = pg_localtime(&timestamp, global_timezone);
pg_strftime(filename + len, MAXPGPATH - len, Log_filename, tm);
}
else
@@ -868,7 +868,7 @@ set_next_rotation_time(void)
*/
rotinterval = Log_RotationAge * 60; /* convert to seconds */
now = time(NULL);
- tm = pg_localtime(&now);
+ tm = pg_localtime(&now, global_timezone);
now += tm->tm_gmtoff;
now -= now % rotinterval;
now += rotinterval;
diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c
index 47dc28d1326..0ac92c304b0 100644
--- a/src/backend/utils/adt/datetime.c
+++ b/src/backend/utils/adt/datetime.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.137 2005/01/11 18:33:45 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.138 2005/04/19 03:13:59 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1634,7 +1634,8 @@ DetermineLocalTimeZone(struct pg_tm * tm)
res = pg_next_dst_boundary(&prevtime,
&before_gmtoff, &before_isdst,
&boundary,
- &after_gmtoff, &after_isdst);
+ &after_gmtoff, &after_isdst,
+ global_timezone);
if (res < 0)
goto overflow; /* failure? */
diff --git a/src/backend/utils/adt/nabstime.c b/src/backend/utils/adt/nabstime.c
index 4e2069f5fb6..631c700c5ac 100644
--- a/src/backend/utils/adt/nabstime.c
+++ b/src/backend/utils/adt/nabstime.c
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/nabstime.c,v 1.127 2004/12/31 22:01:22 pgsql Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/nabstime.c,v 1.128 2005/04/19 03:13:59 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -192,7 +192,7 @@ abstime2tm(AbsoluteTime _time, int *tzp, struct pg_tm * tm, char **tzn)
time -= CTimeZone;
if ((!HasCTZSet) && (tzp != NULL))
- tx = pg_localtime(&time);
+ tx = pg_localtime(&time,global_timezone);
else
tx = pg_gmtime(&time);
@@ -1677,7 +1677,7 @@ timeofday(PG_FUNCTION_ARGS)
gettimeofday(&tp, &tpz);
tt = (pg_time_t) tp.tv_sec;
pg_strftime(templ, sizeof(templ), "%a %b %d %H:%M:%S.%%06d %Y %Z",
- pg_localtime(&tt));
+ pg_localtime(&tt,global_timezone));
snprintf(buf, sizeof(buf), templ, tp.tv_usec);
len = VARHDRSZ + strlen(buf);
diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c
index 1f82b2fec9c..1da473dbfbe 100644
--- a/src/backend/utils/adt/timestamp.c
+++ b/src/backend/utils/adt/timestamp.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/timestamp.c,v 1.118 2005/04/01 14:25:23 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/timestamp.c,v 1.119 2005/04/19 03:13:59 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1078,7 +1078,7 @@ timestamp2tm(Timestamp dt, int *tzp, struct pg_tm * tm, fsec_t *fsec, char **tzn
utime = (pg_time_t) dt;
if ((Timestamp) utime == dt)
{
- struct pg_tm *tx = pg_localtime(&utime);
+ struct pg_tm *tx = pg_localtime(&utime, global_timezone);
tm->tm_year = tx->tm_year + 1900;
tm->tm_mon = tx->tm_mon + 1;