mirror of
https://github.com/postgres/postgres.git
synced 2025-07-05 07:21:24 +03:00
Standard pgindent run for 8.1.
This commit is contained in:
@ -6,7 +6,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/timezone/pgtz.c,v 1.37 2005/09/09 02:31:50 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/timezone/pgtz.c,v 1.38 2005/10/15 02:49:51 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -29,7 +29,7 @@
|
||||
#include "utils/hsearch.h"
|
||||
|
||||
/* Current global timezone */
|
||||
pg_tz *global_timezone = NULL;
|
||||
pg_tz *global_timezone = NULL;
|
||||
|
||||
|
||||
static char tzdir[MAXPGPATH];
|
||||
@ -97,7 +97,7 @@ static void scan_available_timezones(char *tzdir, char *tzdirsub,
|
||||
* Get GMT offset from a system struct tm
|
||||
*/
|
||||
static int
|
||||
get_timezone_offset(struct tm *tm)
|
||||
get_timezone_offset(struct tm * tm)
|
||||
{
|
||||
#if defined(HAVE_STRUCT_TM_TM_ZONE)
|
||||
return tm->tm_gmtoff;
|
||||
@ -128,7 +128,7 @@ build_time_t(int year, int month, int day)
|
||||
* Does a system tm value match one we computed ourselves?
|
||||
*/
|
||||
static bool
|
||||
compare_tm(struct tm *s, struct pg_tm *p)
|
||||
compare_tm(struct tm * s, struct pg_tm * p)
|
||||
{
|
||||
if (s->tm_sec != p->tm_sec ||
|
||||
s->tm_min != p->tm_min ||
|
||||
@ -155,21 +155,25 @@ compare_tm(struct tm *s, struct pg_tm *p)
|
||||
* test time.
|
||||
*/
|
||||
static int
|
||||
score_timezone(const char *tzname, struct tztry *tt)
|
||||
score_timezone(const char *tzname, struct tztry * tt)
|
||||
{
|
||||
int i;
|
||||
pg_time_t pgtt;
|
||||
struct tm *systm;
|
||||
struct pg_tm *pgtm;
|
||||
char cbuf[TZ_STRLEN_MAX + 1];
|
||||
pg_tz tz;
|
||||
pg_tz tz;
|
||||
|
||||
|
||||
/* Load timezone directly. Don't use pg_tzset, because we don't want
|
||||
* all timezones loaded in the cache at startup. */
|
||||
if (tzload(tzname, &tz.state) != 0) {
|
||||
if (tzname[0] == ':' || tzparse(tzname, &tz.state, FALSE) != 0) {
|
||||
return -1; /* can't handle the TZ name at all */
|
||||
/*
|
||||
* Load timezone directly. Don't use pg_tzset, because we don't want all
|
||||
* timezones loaded in the cache at startup.
|
||||
*/
|
||||
if (tzload(tzname, &tz.state) != 0)
|
||||
{
|
||||
if (tzname[0] == ':' || tzparse(tzname, &tz.state, FALSE) != 0)
|
||||
{
|
||||
return -1; /* can't handle the TZ name at all */
|
||||
}
|
||||
}
|
||||
|
||||
@ -257,20 +261,19 @@ identify_system_timezone(void)
|
||||
|
||||
/*
|
||||
* Set up the list of dates to be probed to see how well our timezone
|
||||
* matches the system zone. We first probe January and July of 2004;
|
||||
* this serves to quickly eliminate the vast majority of the TZ
|
||||
* database entries. If those dates match, we probe every week from
|
||||
* 2004 backwards to late 1904. (Weekly resolution is good enough to
|
||||
* identify DST transition rules, since everybody switches on
|
||||
* Sundays.) The further back the zone matches, the better we score
|
||||
* it. This may seem like a rather random way of doing things, but
|
||||
* experience has shown that system-supplied timezone definitions are
|
||||
* likely to have DST behavior that is right for the recent past and
|
||||
* not so accurate further back. Scoring in this way allows us to
|
||||
* recognize zones that have some commonality with the zic database,
|
||||
* without insisting on exact match. (Note: we probe Thursdays, not
|
||||
* Sundays, to avoid triggering DST-transition bugs in localtime
|
||||
* itself.)
|
||||
* matches the system zone. We first probe January and July of 2004; this
|
||||
* serves to quickly eliminate the vast majority of the TZ database
|
||||
* entries. If those dates match, we probe every week from 2004 backwards
|
||||
* to late 1904. (Weekly resolution is good enough to identify DST
|
||||
* transition rules, since everybody switches on Sundays.) The further
|
||||
* back the zone matches, the better we score it. This may seem like a
|
||||
* rather random way of doing things, but experience has shown that
|
||||
* system-supplied timezone definitions are likely to have DST behavior
|
||||
* that is right for the recent past and not so accurate further back.
|
||||
* Scoring in this way allows us to recognize zones that have some
|
||||
* commonality with the zic database, without insisting on exact match.
|
||||
* (Note: we probe Thursdays, not Sundays, to avoid triggering
|
||||
* DST-transition bugs in localtime itself.)
|
||||
*/
|
||||
tt.n_test_times = 0;
|
||||
tt.test_times[tt.n_test_times++] = build_time_t(2004, 1, 15);
|
||||
@ -292,12 +295,12 @@ identify_system_timezone(void)
|
||||
return resultbuf;
|
||||
|
||||
/*
|
||||
* Couldn't find a match in the database, so next we try constructed
|
||||
* zone names (like "PST8PDT").
|
||||
* Couldn't find a match in the database, so next we try constructed zone
|
||||
* names (like "PST8PDT").
|
||||
*
|
||||
* First we need to determine the names of the local standard and
|
||||
* daylight zones. The idea here is to scan forward from today until
|
||||
* we have seen both zones, if both are in use.
|
||||
* First we need to determine the names of the local standard and daylight
|
||||
* zones. The idea here is to scan forward from today until we have seen
|
||||
* both zones, if both are in use.
|
||||
*/
|
||||
memset(std_zone_name, 0, sizeof(std_zone_name));
|
||||
memset(dst_zone_name, 0, sizeof(dst_zone_name));
|
||||
@ -306,15 +309,15 @@ identify_system_timezone(void)
|
||||
tnow = time(NULL);
|
||||
|
||||
/*
|
||||
* Round back to a GMT midnight so results don't depend on local time
|
||||
* of day
|
||||
* Round back to a GMT midnight so results don't depend on local time of
|
||||
* day
|
||||
*/
|
||||
tnow -= (tnow % T_DAY);
|
||||
|
||||
/*
|
||||
* We have to look a little further ahead than one year, in case today
|
||||
* is just past a DST boundary that falls earlier in the year than the
|
||||
* next similar boundary. Arbitrarily scan up to 14 months.
|
||||
* We have to look a little further ahead than one year, in case today is
|
||||
* just past a DST boundary that falls earlier in the year than the next
|
||||
* similar boundary. Arbitrarily scan up to 14 months.
|
||||
*/
|
||||
for (t = tnow; t <= tnow + T_MONTH * 14; t += T_MONTH)
|
||||
{
|
||||
@ -348,7 +351,7 @@ identify_system_timezone(void)
|
||||
{
|
||||
ereport(LOG,
|
||||
(errmsg("unable to determine system timezone, defaulting to \"%s\"", "GMT"),
|
||||
errhint("You can specify the correct timezone in postgresql.conf.")));
|
||||
errhint("You can specify the correct timezone in postgresql.conf.")));
|
||||
return NULL; /* go to GMT */
|
||||
}
|
||||
|
||||
@ -373,19 +376,18 @@ identify_system_timezone(void)
|
||||
return resultbuf;
|
||||
|
||||
/*
|
||||
* Did not find the timezone. Fallback to use a GMT zone. Note that
|
||||
* the zic timezone database names the GMT-offset zones in POSIX
|
||||
* style: plus is west of Greenwich. It's unfortunate that this is
|
||||
* opposite of SQL conventions. Should we therefore change the names?
|
||||
* Probably not...
|
||||
* Did not find the timezone. Fallback to use a GMT zone. Note that the
|
||||
* zic timezone database names the GMT-offset zones in POSIX style: plus
|
||||
* is west of Greenwich. It's unfortunate that this is opposite of SQL
|
||||
* conventions. Should we therefore change the names? Probably not...
|
||||
*/
|
||||
snprintf(resultbuf, sizeof(resultbuf), "Etc/GMT%s%d",
|
||||
(-std_ofs > 0) ? "+" : "", -std_ofs / 3600);
|
||||
|
||||
ereport(LOG,
|
||||
(errmsg("could not recognize system timezone, defaulting to \"%s\"",
|
||||
resultbuf),
|
||||
errhint("You can specify the correct timezone in postgresql.conf.")));
|
||||
(errmsg("could not recognize system timezone, defaulting to \"%s\"",
|
||||
resultbuf),
|
||||
errhint("You can specify the correct timezone in postgresql.conf.")));
|
||||
return resultbuf;
|
||||
}
|
||||
|
||||
@ -409,7 +411,7 @@ identify_system_timezone(void)
|
||||
* score. bestzonename must be a buffer of length TZ_STRLEN_MAX + 1.
|
||||
*/
|
||||
static void
|
||||
scan_available_timezones(char *tzdir, char *tzdirsub, struct tztry *tt,
|
||||
scan_available_timezones(char *tzdir, char *tzdirsub, struct tztry * tt,
|
||||
int *bestscore, char *bestzonename)
|
||||
{
|
||||
int tzdir_orig_len = strlen(tzdir);
|
||||
@ -477,7 +479,6 @@ scan_available_timezones(char *tzdir, char *tzdirsub, struct tztry *tt,
|
||||
|
||||
FreeDir(dirdesc);
|
||||
}
|
||||
|
||||
#else /* WIN32 */
|
||||
|
||||
static const struct
|
||||
@ -490,12 +491,11 @@ static const struct
|
||||
{
|
||||
/*
|
||||
* This list was built from the contents of the registry at
|
||||
* HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
|
||||
* NT\CurrentVersion\Time Zones on Windows XP Professional SP1
|
||||
* HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time
|
||||
* Zones on Windows XP Professional SP1
|
||||
*
|
||||
* The zones have been matched to zic timezones by looking at the cities
|
||||
* listed in the win32 display name (in the comment here) in most
|
||||
* cases.
|
||||
* listed in the win32 display name (in the comment here) in most cases.
|
||||
*/
|
||||
{
|
||||
"Afghanistan Standard Time", "Afghanistan Daylight Time",
|
||||
@ -560,8 +560,8 @@ static const struct
|
||||
{
|
||||
"Central Europe Standard Time", "Central Europe Daylight Time",
|
||||
"Europe/Belgrade"
|
||||
}, /* (GMT+01:00) Belgrade, Bratislava,
|
||||
* Budapest, Ljubljana, Prague */
|
||||
}, /* (GMT+01:00) Belgrade, Bratislava, Budapest,
|
||||
* Ljubljana, Prague */
|
||||
{
|
||||
"Central European Standard Time", "Central European Daylight Time",
|
||||
"Europe/Sarajevo"
|
||||
@ -579,13 +579,12 @@ static const struct
|
||||
{
|
||||
"China Standard Time", "China Daylight Time",
|
||||
"Asia/Hong_Kong"
|
||||
}, /* (GMT+08:00) Beijing, Chongqing, Hong
|
||||
* Kong, Urumqi */
|
||||
}, /* (GMT+08:00) Beijing, Chongqing, Hong Kong,
|
||||
* Urumqi */
|
||||
{
|
||||
"Dateline Standard Time", "Dateline Daylight Time",
|
||||
"Etc/GMT+12"
|
||||
}, /* (GMT-12:00) International Date Line
|
||||
* West */
|
||||
}, /* (GMT-12:00) International Date Line West */
|
||||
{
|
||||
"E. Africa Standard Time", "E. Africa Daylight Time",
|
||||
"Africa/Nairobi"
|
||||
@ -617,13 +616,12 @@ static const struct
|
||||
{
|
||||
"Fiji Standard Time", "Fiji Daylight Time",
|
||||
"Pacific/Fiji"
|
||||
}, /* (GMT+12:00) Fiji, Kamchatka, Marshall
|
||||
* Is. */
|
||||
}, /* (GMT+12:00) Fiji, Kamchatka, Marshall Is. */
|
||||
{
|
||||
"FLE Standard Time", "FLE Daylight Time",
|
||||
"Europe/Helsinki"
|
||||
}, /* (GMT+02:00) Helsinki, Kyiv, Riga,
|
||||
* Sofia, Tallinn, Vilnius */
|
||||
}, /* (GMT+02:00) Helsinki, Kyiv, Riga, Sofia,
|
||||
* Tallinn, Vilnius */
|
||||
{
|
||||
"GMT Standard Time", "GMT Daylight Time",
|
||||
"Europe/Dublin"
|
||||
@ -648,8 +646,8 @@ static const struct
|
||||
{
|
||||
"India Standard Time", "India Daylight Time",
|
||||
"Asia/Calcutta"
|
||||
}, /* (GMT+05:30) Chennai, Kolkata, Mumbai,
|
||||
* New Delhi */
|
||||
}, /* (GMT+05:30) Chennai, Kolkata, Mumbai, New
|
||||
* Delhi */
|
||||
{
|
||||
"Iran Standard Time", "Iran Daylight Time",
|
||||
"Asia/Tehran"
|
||||
@ -719,8 +717,8 @@ static const struct
|
||||
{
|
||||
"Romance Standard Time", "Romance Daylight Time",
|
||||
"Europe/Brussels"
|
||||
}, /* (GMT+01:00) Brussels, Copenhagen,
|
||||
* Madrid, Paris */
|
||||
}, /* (GMT+01:00) Brussels, Copenhagen, Madrid,
|
||||
* Paris */
|
||||
{
|
||||
"Russian Standard Time", "Russian Daylight Time",
|
||||
"Europe/Moscow"
|
||||
@ -791,18 +789,17 @@ static const struct
|
||||
"Australia/Perth"
|
||||
}, /* (GMT+08:00) Perth */
|
||||
/* {"W. Central Africa Standard Time", "W. Central Africa Daylight Time",
|
||||
* * ""}, Could not find a match for this one. Excluded for now. *//* (
|
||||
* * * ""}, Could not find a match for this one. Excluded for now. *//* (
|
||||
* G MT+01:00) West Central Africa */
|
||||
{
|
||||
"W. Europe Standard Time", "W. Europe Daylight Time",
|
||||
"CET"
|
||||
}, /* (GMT+01:00) Amsterdam, Berlin, Bern,
|
||||
* Rome, Stockholm, Vienna */
|
||||
}, /* (GMT+01:00) Amsterdam, Berlin, Bern, Rome,
|
||||
* Stockholm, Vienna */
|
||||
{
|
||||
"West Asia Standard Time", "West Asia Daylight Time",
|
||||
"Asia/Karachi"
|
||||
}, /* (GMT+05:00) Islamabad, Karachi,
|
||||
* Tashkent */
|
||||
}, /* (GMT+05:00) Islamabad, Karachi, Tashkent */
|
||||
{
|
||||
"West Pacific Standard Time", "West Pacific Daylight Time",
|
||||
"Pacific/Guam"
|
||||
@ -821,11 +818,11 @@ identify_system_timezone(void)
|
||||
{
|
||||
int i;
|
||||
char tzname[128];
|
||||
char localtzname[256];
|
||||
char localtzname[256];
|
||||
time_t t = time(NULL);
|
||||
struct tm *tm = localtime(&t);
|
||||
HKEY rootKey;
|
||||
int idx;
|
||||
HKEY rootKey;
|
||||
int idx;
|
||||
|
||||
if (!tm)
|
||||
{
|
||||
@ -849,62 +846,62 @@ identify_system_timezone(void)
|
||||
}
|
||||
|
||||
/*
|
||||
* Localized Windows versions return localized names for the
|
||||
* timezone. Scan the registry to find the English name,
|
||||
* and then try matching against our table again.
|
||||
* Localized Windows versions return localized names for the timezone.
|
||||
* Scan the registry to find the English name, and then try matching
|
||||
* against our table again.
|
||||
*/
|
||||
memset(localtzname, 0, sizeof(localtzname));
|
||||
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
|
||||
"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones",
|
||||
"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones",
|
||||
0,
|
||||
KEY_READ,
|
||||
&rootKey) != ERROR_SUCCESS)
|
||||
{
|
||||
ereport(WARNING,
|
||||
(errmsg_internal("could not open registry key to identify Windows timezone: %i", (int)GetLastError())));
|
||||
(errmsg_internal("could not open registry key to identify Windows timezone: %i", (int) GetLastError())));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (idx = 0; ; idx++)
|
||||
|
||||
for (idx = 0;; idx++)
|
||||
{
|
||||
char keyname[256];
|
||||
char zonename[256];
|
||||
DWORD namesize;
|
||||
FILETIME lastwrite;
|
||||
HKEY key;
|
||||
LONG r;
|
||||
|
||||
char keyname[256];
|
||||
char zonename[256];
|
||||
DWORD namesize;
|
||||
FILETIME lastwrite;
|
||||
HKEY key;
|
||||
LONG r;
|
||||
|
||||
memset(keyname, 0, sizeof(keyname));
|
||||
namesize = sizeof(keyname);
|
||||
if ((r=RegEnumKeyEx(rootKey,
|
||||
idx,
|
||||
keyname,
|
||||
&namesize,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
&lastwrite)) != ERROR_SUCCESS)
|
||||
if ((r = RegEnumKeyEx(rootKey,
|
||||
idx,
|
||||
keyname,
|
||||
&namesize,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
&lastwrite)) != ERROR_SUCCESS)
|
||||
{
|
||||
if (r == ERROR_NO_MORE_ITEMS)
|
||||
break;
|
||||
ereport(WARNING,
|
||||
(errmsg_internal("could not enumerate registry subkeys to identify Windows timezone: %i", (int)r)));
|
||||
(errmsg_internal("could not enumerate registry subkeys to identify Windows timezone: %i", (int) r)));
|
||||
break;
|
||||
}
|
||||
|
||||
if ((r=RegOpenKeyEx(rootKey,keyname,0,KEY_READ,&key)) != ERROR_SUCCESS)
|
||||
if ((r = RegOpenKeyEx(rootKey, keyname, 0, KEY_READ, &key)) != ERROR_SUCCESS)
|
||||
{
|
||||
ereport(WARNING,
|
||||
(errmsg_internal("could not open registry subkey to identify Windows timezone: %i", (int)r)));
|
||||
(errmsg_internal("could not open registry subkey to identify Windows timezone: %i", (int) r)));
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
memset(zonename, 0, sizeof(zonename));
|
||||
namesize = sizeof(zonename);
|
||||
if ((r=RegQueryValueEx(key, "Std", NULL, NULL, zonename, &namesize)) != ERROR_SUCCESS)
|
||||
if ((r = RegQueryValueEx(key, "Std", NULL, NULL, zonename, &namesize)) != ERROR_SUCCESS)
|
||||
{
|
||||
ereport(WARNING,
|
||||
(errmsg_internal("could not query value for 'std' to identify Windows timezone: %i", (int)r)));
|
||||
(errmsg_internal("could not query value for 'std' to identify Windows timezone: %i", (int) r)));
|
||||
RegCloseKey(key);
|
||||
break;
|
||||
}
|
||||
@ -917,10 +914,10 @@ identify_system_timezone(void)
|
||||
}
|
||||
memset(zonename, 0, sizeof(zonename));
|
||||
namesize = sizeof(zonename);
|
||||
if ((r=RegQueryValueEx(key, "Dlt", NULL, NULL, zonename, &namesize)) != ERROR_SUCCESS)
|
||||
if ((r = RegQueryValueEx(key, "Dlt", NULL, NULL, zonename, &namesize)) != ERROR_SUCCESS)
|
||||
{
|
||||
ereport(WARNING,
|
||||
(errmsg_internal("could not query value for 'dlt' to identify Windows timezone: %i", (int)r)));
|
||||
(errmsg_internal("could not query value for 'dlt' to identify Windows timezone: %i", (int) r)));
|
||||
RegCloseKey(key);
|
||||
break;
|
||||
}
|
||||
@ -994,9 +991,9 @@ init_timezone_hashtable(void)
|
||||
struct pg_tz *
|
||||
pg_tzset(const char *name)
|
||||
{
|
||||
pg_tz *tzp;
|
||||
pg_tz tz;
|
||||
|
||||
pg_tz *tzp;
|
||||
pg_tz tz;
|
||||
|
||||
if (strlen(name) > TZ_STRLEN_MAX)
|
||||
return NULL; /* not going to fit */
|
||||
|
||||
@ -1004,10 +1001,10 @@ pg_tzset(const char *name)
|
||||
if (!init_timezone_hashtable())
|
||||
return NULL;
|
||||
|
||||
tzp = (pg_tz *)hash_search(timezone_cache,
|
||||
name,
|
||||
HASH_FIND,
|
||||
NULL);
|
||||
tzp = (pg_tz *) hash_search(timezone_cache,
|
||||
name,
|
||||
HASH_FIND,
|
||||
NULL);
|
||||
if (tzp)
|
||||
{
|
||||
/* Timezone found in cache, nothing more to do */
|
||||
@ -1030,7 +1027,7 @@ pg_tzset(const char *name)
|
||||
name,
|
||||
HASH_ENTER,
|
||||
NULL);
|
||||
|
||||
|
||||
strcpy(tzp->TZname, tz.TZname);
|
||||
memcpy(&tzp->state, &tz.state, sizeof(tz.state));
|
||||
|
||||
@ -1055,9 +1052,9 @@ tz_acceptable(pg_tz *tz)
|
||||
pg_time_t time2000;
|
||||
|
||||
/*
|
||||
* To detect leap-second timekeeping, run pg_localtime for what should
|
||||
* be GMT midnight, 2000-01-01. Insist that the tm_sec value be zero;
|
||||
* any other result has to be due to leap seconds.
|
||||
* To detect leap-second timekeeping, run pg_localtime for what should be
|
||||
* GMT midnight, 2000-01-01. Insist that the tm_sec value be zero; any
|
||||
* other result has to be due to leap seconds.
|
||||
*/
|
||||
time2000 = (POSTGRES_EPOCH_JDATE - UNIX_EPOCH_JDATE) * SECS_PER_DAY;
|
||||
tt = pg_localtime(&time2000, tz);
|
||||
@ -1074,11 +1071,11 @@ tz_acceptable(pg_tz *tz)
|
||||
static bool
|
||||
set_global_timezone(const char *tzname)
|
||||
{
|
||||
pg_tz *tznew;
|
||||
pg_tz *tznew;
|
||||
|
||||
if (!tzname || !tzname[0])
|
||||
return false;
|
||||
|
||||
|
||||
tznew = pg_tzset(tzname);
|
||||
if (!tznew)
|
||||
return false;
|
||||
|
Reference in New Issue
Block a user