derick          Wed Oct  5 07:06:57 2005 EDT

  Modified files:              (Branch: PHP_5_1)
    /php-src/ext/date   php_date.c 
  Log:
  - Implement correct Windows timezone guessing.
  
  
http://cvs.php.net/diff.php/php-src/ext/date/php_date.c?r1=1.43.2.11&r2=1.43.2.12&ty=u
Index: php-src/ext/date/php_date.c
diff -u php-src/ext/date/php_date.c:1.43.2.11 
php-src/ext/date/php_date.c:1.43.2.12
--- php-src/ext/date/php_date.c:1.43.2.11       Wed Oct  5 04:23:39 2005
+++ php-src/ext/date/php_date.c Wed Oct  5 07:06:56 2005
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_date.c,v 1.43.2.11 2005/10/05 08:23:39 derick Exp $ */
+/* $Id: php_date.c,v 1.43.2.12 2005/10/05 11:06:56 derick Exp $ */
 
 #include "php.h"
 #include "php_streams.h"
@@ -278,7 +278,7 @@
 /* }}} */
 
 /* {{{ Timezone Cache functions */
-static timelib_tzinfo *php_date_parse_tzfile(char *tzname, timelib_tzdb *tzdb 
TSRMLS_CC)
+static timelib_tzinfo *php_date_parse_tzfile(char *tzname, timelib_tzdb *tzdb 
TSRMLS_DC)
 {
        timelib_tzinfo *tzi, **ptzi;
 
@@ -303,7 +303,7 @@
        }
        /* Check environment variable */
        env = getenv("TZ");
-       if (env && *env && strlen(env)) {
+       if (env && *env) {
                return env;
        }
        /* Check config setting for default timezone */
@@ -330,6 +330,7 @@
 #endif
 #ifdef PHP_WIN32
        {
+               char *tzid;
                TIME_ZONE_INFORMATION tzi;
 
                switch (GetTimeZoneInformation(&tzi))
@@ -337,23 +338,25 @@
                        case TIME_ZONE_ID_UNKNOWN:
                                /* we have no clue what it is, return UTC */
                                php_error_docref(NULL TSRMLS_CC, E_STRICT, "It 
is not safe to rely on the systems timezone settings, please use the 
date.timezone setting, the TZ environment variable or the 
date_default_timezone_set() function. We use 'UTC' instead.");
-                               return "UTC";
+                               break;
 
                        case TIME_ZONE_ID_STANDARD:
-                               tzid = 
timelib_timezone_id_from_abbr(tzi->StandardName, (tzi->Bias - 
tzi->StandardBias) * 60, 0);
-                               php_error_docref(NULL TSRMLS_CC, E_STRICT, "It 
is not safe to rely on the systems timezone settings, please use the 
date.timezone setting, the TZ environment variable or the 
date_default_timezone_set() function. We use '%s' for '%s/%.1f/no DST' 
instead.", tzid, tzi->StandardName, (float) ((tzi->Bias - tzi->StandardBias) / 
60));
+                               tzid = timelib_timezone_id_from_abbr("", 
(tzi.Bias + tzi.StandardBias) * -60, 0);
+                               if (! tzid) {
+                                       tzid = "UTC";
+                               }
+                               php_error_docref(NULL TSRMLS_CC, E_STRICT, "It 
is not safe to rely on the systems timezone settings, please use the 
date.timezone setting, the TZ environment variable or the 
date_default_timezone_set() function. We use '%s' for '%.1f/no DST' instead.", 
tzid, (float) ((tzi.Bias + tzi.StandardBias) / -60));
                                break;
 
                        case TIME_ZONE_ID_DAYLIGHT:
-                               tzid = 
timelib_timezone_id_from_abbr(tzi->DaylightName, (tzi->Bias - 
tzi->DaylightBias) * 60, 1);
-                               php_error_docref(NULL TSRMLS_CC, E_STRICT, "It 
is not safe to rely on the systems timezone settings, please use the 
date.timezone setting, the TZ environment variable or the 
date_default_timezone_set() function. We use '%s' for '%s/%.1f/DST' instead.", 
tzid, tzi->StandardName, (float) ((tzi->Bias - tzi->DaylightBias) / 60));
+                               tzid = timelib_timezone_id_from_abbr("", 
(tzi.Bias + tzi.DaylightBias) * -60, 1);
+                               if (! tzid) {
+                                       tzid = "UTC";
+                               }
+                               php_error_docref(NULL TSRMLS_CC, E_STRICT, "It 
is not safe to rely on the systems timezone settings, please use the 
date.timezone setting, the TZ environment variable or the 
date_default_timezone_set() function. We use '%s' for '%.1f/DST' instead.", 
tzid, (float) ((tzi.Bias + tzi.DaylightBias) / -60));
                                break;
 
                }
-
-               php_error_docref(NULL TSRMLS_CC, E_STRICT, "Extra Debug Info: 
bias: %d, standard bias: %d, daylight bias: %d, s. name: %s, d. name: %s",
-                       tzi->Bias, tzi->StandardBias, tzi->DaylightBias, 
tzi->StandardName, tzi->DaylightName);
-               return tzid;
        }
 #endif
        /* Fallback to UTC */
@@ -366,10 +369,10 @@
        timelib_tzinfo *tzi;
        
        tz = guess_timezone(TSRMLS_C);
-       tzi = php_date_parse_tzfile(tz, DATE_TIMEZONEDB);
+       tzi = php_date_parse_tzfile(tz, DATE_TIMEZONEDB TSRMLS_CC);
        if (! tzi) {
                php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Timezone setting 
(date.timezone) or TZ environment variable contains an unknown timezone.");
-               tzi = php_date_parse_tzfile("UTC", DATE_TIMEZONEDB);
+               tzi = php_date_parse_tzfile("UTC", DATE_TIMEZONEDB TSRMLS_CC);
 
                if (! tzi) {
                        php_error_docref(NULL TSRMLS_CC, E_ERROR, "Timezone 
database is corrupt - this should *never* happen!");
@@ -1297,12 +1300,12 @@
                
                tzid = timelib_timezone_id_from_abbr(tz, -1, 0);
                if (tzid) {
-                       tzi = php_date_parse_tzfile(tzid, DATE_TIMEZONEDB);
+                       tzi = php_date_parse_tzfile(tzid, DATE_TIMEZONEDB 
TSRMLS_CC);
                }
        }
        /* Try finding the tz information as "Timezone Identifier" */
        if (!tzi) {
-               tzi = php_date_parse_tzfile(tz, DATE_TIMEZONEDB);
+               tzi = php_date_parse_tzfile(tz, DATE_TIMEZONEDB TSRMLS_CC);
        }
        /* If we find it we instantiate the object otherwise, well, we don't 
and return false */
        if (tzi) {

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to