]> git.pld-linux.org Git - packages/php.git/commitdiff
update systzdata patch from debian -- r10: make timezone case insensitive
authorElan Ruusamäe <glen@delfi.ee>
Thu, 5 Dec 2013 19:13:41 +0000 (21:13 +0200)
committerElan Ruusamäe <glen@delfi.ee>
Thu, 5 Dec 2013 19:13:41 +0000 (21:13 +0200)
php-systzdata.patch

index f841e9bb609264de40e464dc596f0773af4cb02d..053f769f474446507610d2a649870d9bcbd9d2f3 100644 (file)
@@ -2,6 +2,7 @@ Add support for use of the system timezone database, rather
 than embedding a copy.  Discussed upstream but was not desired.
 
 History:
+r10 : make timezone case insensitive
 r9: fix another compile error without --with-system-tzdata configured (Michael Heimpold)
 r8: fix compile error without --with-system-tzdata configured
 r7: improve check for valid timezone id to exclude directories
@@ -16,8 +17,8 @@ r3: fix a crash if /usr/share/zoneinfo doesn't exist (Raphael Geissert)
 r2: add filesystem trawl to set up name alias index
 r1: initial revision
 
---- a/ext/date/lib/parse_tz.c
-+++ b/ext/date/lib/parse_tz.c
+--- php5.orig/ext/date/lib/parse_tz.c
++++ php5/ext/date/lib/parse_tz.c
 @@ -24,6 +24,16 @@
  
  #include "timelib.h"
@@ -66,7 +67,7 @@ r1: initial revision
        /* read BC flag */
        tz->bc = (**tzf == '\1');
        *tzf += 1;
-@@ -260,7 +280,397 @@ void timelib_dump_tzinfo(timelib_tzinfo
+@@ -260,7 +280,405 @@ void timelib_dump_tzinfo(timelib_tzinfo
        }
  }
  
@@ -80,7 +81,7 @@ r1: initial revision
 +#endif
 +
 +/* System timezone database pointer. */
-+static const timelib_tzdb *timezonedb_system = NULL;
++static const timelib_tzdb *timezonedb_system;
 +
 +/* Hash table entry for the cache of the zone.tab mapping table. */
 +struct location_info {
@@ -98,13 +99,14 @@ r1: initial revision
 + * prevent too many collisions. */
 +#define LOCINFO_HASH_SIZE (1021)
 +
++/* Compute a case insensitive hash of str */
 +static uint32_t tz_hash(const char *str)
 +{
 +    const unsigned char *p = (const unsigned char *)str;
 +    uint32_t hash = 5381;
 +    int c;
 +    
-+    while ((c = *p++) != '\0') {
++    while ((c = tolower(*p++)) != '\0') {
 +        hash = (hash << 5) ^ hash ^ c;
 +    }
 +    
@@ -442,6 +444,13 @@ r1: initial revision
 +              return NULL;
 +      }
 +
++    if (system_location_table) {
++        const struct location_info *li;
++        if ((li = find_zone_info(system_location_table, timezone)) != NULL) {
++            /* Use the stored name to avoid case issue */
++            timezone = li->name;
++        }
++    }
 +      snprintf(fname, sizeof fname, ZONEINFO_PREFIX "/%s", timezone);
 +      
 +      fd = open(fname, O_RDONLY);
@@ -465,7 +474,7 @@ r1: initial revision
  {
        int left = 0, right = tzdb->index_size - 1;
  #ifdef HAVE_SETLOCALE
-@@ -299,36 +709,128 @@ static int seek_to_tz_position(const uns
+@@ -299,36 +717,135 @@ static int seek_to_tz_position(const uns
        return 0;
  }
  
@@ -537,7 +546,14 @@ r1: initial revision
 +            struct stat st;
 +
 +            if (timezone[0] == '\0' || strstr(timezone, "..") != NULL) {
-+              return 0;
++                      return 0;
++            }
++
++            if (system_location_table) {
++                if (find_zone_info(system_location_table, timezone) != NULL) {
++                    /* found in cache */
++                    return 1;
++                }
 +            }
 +            
 +            snprintf(fname, sizeof fname, ZONEINFO_PREFIX "/%s", timezone);
@@ -597,8 +613,8 @@ r1: initial revision
        } else {
                tmp = NULL;
        }
---- a/ext/date/lib/timelib.m4
-+++ b/ext/date/lib/timelib.m4
+--- php5.orig/ext/date/lib/timelib.m4
++++ php5/ext/date/lib/timelib.m4
 @@ -78,3 +78,17 @@ stdlib.h
  
  dnl Check for strtoll, atoll
This page took 0.05929 seconds and 4 git commands to generate.