diff options
author | Christopher Jones <sixd@php.net> | 2012-10-08 16:13:07 -0700 |
---|---|---|
committer | Christopher Jones <sixd@php.net> | 2012-10-08 16:13:07 -0700 |
commit | 91169fb24fa2c63d6cbab226a02d5fef277ea11b (patch) | |
tree | 8d088abd1cfaf881697f87b59e230ddbf3863b7f | |
parent | f0c65bc0e3bb4565101a9dadb8fb01ef2a760d49 (diff) | |
parent | 67611c67fa5a3b2c199d41ef7df3307308c56faa (diff) | |
download | php-git-91169fb24fa2c63d6cbab226a02d5fef277ea11b.tar.gz |
Merge branch 'PHP-5.4' of https://git.php.net/repository/php-src into PHP-5.4
* 'PHP-5.4' of https://git.php.net/repository/php-src: (45 commits)
Fixed bug #63219 (Segfault when aliasing trait method when autoloader throws excpetion)
exposing the libxpm version in phpinfo
5.4.9-dev
PHP-5.3 branch is 5.3.19 now
reverted the previous fix for libpng include
fixed include checks for libpng under win
Avoding superfluous function call
Add test for #35895
Now we can set the tsrm_ls manually
Fixed bug #63184 test (ext/spl/tests/RecursiveDirectoryIterator_getSubPathname_basic.phpt failed)
add news for --offline
add --offline option to run-tests command
Bug #63147: SKIP_ONLINE_TESTS, for getmxrr
Bug #63147: introduce SKIP_ONLINE_TESTS, for gethostbyname
gethostbyname_basic002.phpt is a duplicate to gethostbyname_error004.phpt
add bug #63162
fix test and move to proper place
synergy ftl. Removed duplicate fields.
adding test phpt
Bug #63162 - parse_url does not matches password component
...
40 files changed, 1127 insertions, 796 deletions
@@ -1,6 +1,19 @@ +define set_ts + set $tsrm_ls = $arg0 +end + +document set_ts + set the ts resource, it is impossible for gdb to + call ts_resource_ex while no process is running, + but we could get the resource from the argument + of frame info. +end + define ____executor_globals if basic_functions_module.zts - set $tsrm_ls = ts_resource_ex(0, 0) + if !$tsrm_ls + set $tsrm_ls = ts_resource_ex(0, 0) + end set $eg = ((zend_executor_globals*) (*((void ***) $tsrm_ls))[executor_globals_id-1]) set $cg = ((zend_compiler_globals*) (*((void ***) $tsrm_ls))[compiler_globals_id-1]) else @@ -38,12 +51,53 @@ define dump_bt set $t = $arg0 while $t printf "[%p] ", $t - if $t->function_state.function->common.function_name - if $t->function_state.arguments - set $count = (int)*($t->function_state.arguments) - printf "%s(", $t->function_state.function->common.function_name + set $fst = $t->function_state + if $fst.function->common.function_name + if $fst.arguments + set $count = (int)*($fst.arguments) + + if $t->object + if $fst.function.common.scope + printf "%s->", $fst.function.common.scope->name + else + if !$eg + ____executor_globals + end + + set $known_class = 0 + if $eg + set $handle = $t->object.value.obj.handle + set $handlers = $t->object.value.obj.handlers + set $zobj = (zend_object *)$eg.objects_store.object_buckets[$handle].bucket.obj.object + + if $handlers->get_class_entry == &zend_std_object_get_class + set $known_class = 1 + + if $handlers.get_class_name + if $handlers.get_class_name != &zend_std_object_get_class_name + set $known_class = 0 + end + end + + if $known_class + printf "%s->", $zobj->ce.name + end + end + end + + if !$known_class + printf "(Unknown)->" + end + end + else + if $fst.function.common.scope + printf "%s::", $fst.function.common.scope->name + end + end + + printf "%s(", $fst.function->common.function_name while $count > 0 - set $zvalue = *(zval **)($t->function_state.arguments - $count) + set $zvalue = *(zval **)($fst.arguments - $count) set $type = $zvalue->type if $type == 0 printf "NULL" @@ -73,7 +127,7 @@ define dump_bt if $type == 7 printf "resource(#%d)", $zvalue->value.lval end - if $type == 8 + if $type == 8 printf "constant" end if $type == 9 @@ -89,7 +143,7 @@ define dump_bt end printf ") " else - printf "%s() ", $t->function_state.function->common.function_name + printf "%s() ", $fst.function->common.function_name end else printf "??? " @@ -600,7 +654,7 @@ define zmemcheck end end if $not_found - printf "no such block that begins at %p.\n", $aptr + printf "no such block that begins at %p.\n", $aptr end if $arg0 == 0 printf "-------------------------------------------------------------------------------\n" @@ -1,5 +1,7 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +?? ??? 2012, PHP 5.4.9 + ?? ??? 2012, PHP 5.4.8 - CLI server: @@ -9,9 +11,13 @@ PHP NEWS (Lars) - Core: + . Fixed bug #63219 (Segfault when aliasing trait method when autoloader + throws excpetion). (Laruence) . Added optional second argument for assert() to specify custom message. Patch by Lonny Kapelushnik (lonny@lonnylot.com). (Lars) . Support building PHP with the native client toolchain. (Stuart Langley) + . Added --offline option for tests. (Remi) + . Fixed bug #63162 (parse_url does not match password component). (husman) . Fixed bug #63111 (is_callable() lies for abstract static method). (Dmitry) . Fixed bug #63093 (Segfault while load extension failed in zts-build). (Laruence) @@ -25,11 +31,28 @@ PHP NEWS . Fixed bug #60909 (custom error handler throwing Exception + fatal error = no shutdown function). (Dmitry) . Fixed bug #60723 (error_log error time has changed to UTC ignoring default - timezo). (Laruence) + timezone). (Laruence) + +- cURL: + . Fixed bug #62085 (file_get_contents a remote file by Curl wrapper will + cause cpu Soaring). (Pierrick) + +- Date: + . Fixed bug #62896 ("DateTime->modify('+0 days')" modifies DateTime object) + (Lonny Kapelushnik) + . Fixed bug #62561 (DateTime add 'P1D' adds 25 hours). (Lonny Kapelushnik) - DOM: . Fixed bug #63015 (Incorrect arginfo for DOMErrorHandler). (Rob) +- FPM: + . Fixed bug #62954 (startup problems fpm / php-fpm). (fat) + . Fixed bug #62886 (PHP-FPM may segfault/hang on startup). (fat) + . Fixed bug #63085 (Systemd integration and daemonize). (remi, fat) + . Fixed bug #62947 (Unneccesary warnings on FPM). (fat) + . Fixed bug #62887 (Only /status?plain&full gives "last request cpu"). (fat) + . Fixed bug #62216 (Add PID to php-fpm init.d script). (fat) + - OpenSSL: . Implemented FR #61421 (OpenSSL signature verification missing RMD160, SHA224, SHA256, SHA384, SHA512). (Mark Jones) @@ -54,7 +77,7 @@ PHP NEWS . Fixed bug #63000 (MCAST_JOIN_GROUP on OSX is broken, merge of PR 185 by Igor Wiedler). (Lars) -?? ??? 2012, PHP 5.4.7 +13 Sep 2012, PHP 5.4.7 - Core: . Fixed bug (segfault while build with zts and GOTO vm-kind). (Laruence) diff --git a/Zend/tests/bug63173.phpt b/Zend/tests/bug63173.phpt new file mode 100644 index 0000000000..36ebf203d2 --- /dev/null +++ b/Zend/tests/bug63173.phpt @@ -0,0 +1,12 @@ +--TEST-- +Bug #63173: Crash when invoking invalid array callback +--FILE-- +<?php + +// the important part here are the indexes 1 and 2 +$callback = [1 => 0, 2 => 0]; +$callback(); + +?> +--EXPECTF-- +Fatal error: Array callback has to contain indices 0 and 1 in %s on line %d diff --git a/Zend/tests/bug63219.phpt b/Zend/tests/bug63219.phpt new file mode 100644 index 0000000000..999be4a853 --- /dev/null +++ b/Zend/tests/bug63219.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #63219 (Segfault when aliasing trait method when autoloader throws excpetion) +--FILE-- +<?php +trait TFoo { + public function fooMethod(){} +} + +class C { + use TFoo { + Typo::fooMethod as tf; + } +} + +echo "okey"; +?> +--EXPECTF-- +Fatal error: Could not find trait Typo in %sbug63219.php on line %d diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index c39d8eaa1e..303eedb6bc 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -3975,8 +3975,10 @@ static void zend_traits_init_trait_structures(zend_class_entry *ce TSRMLS_DC) /* /** Resolve classes for all precedence operations. */ if (cur_precedence->exclude_from_classes) { cur_method_ref = cur_precedence->trait_method; - cur_precedence->trait_method->ce = zend_fetch_class(cur_method_ref->class_name, - cur_method_ref->cname_len, ZEND_FETCH_CLASS_TRAIT TSRMLS_CC); + if (!(cur_precedence->trait_method->ce = zend_fetch_class(cur_method_ref->class_name, cur_method_ref->cname_len, + ZEND_FETCH_CLASS_TRAIT|ZEND_FETCH_CLASS_NO_AUTOLOAD TSRMLS_CC))) { + zend_error(E_COMPILE_ERROR, "Could not find trait %s", cur_method_ref->class_name); + } /** Ensure that the prefered method is actually available. */ lcname = zend_str_tolower_dup(cur_method_ref->method_name, @@ -4003,7 +4005,9 @@ static void zend_traits_init_trait_structures(zend_class_entry *ce TSRMLS_DC) /* char* class_name = (char*)cur_precedence->exclude_from_classes[j]; zend_uint name_length = strlen(class_name); - cur_precedence->exclude_from_classes[j] = zend_fetch_class(class_name, name_length, ZEND_FETCH_CLASS_TRAIT TSRMLS_CC); + if (!(cur_precedence->exclude_from_classes[j] = zend_fetch_class(class_name, name_length, ZEND_FETCH_CLASS_TRAIT |ZEND_FETCH_CLASS_NO_AUTOLOAD TSRMLS_CC))) { + zend_error(E_COMPILE_ERROR, "Could not find trait %s", class_name); + } /* make sure that the trait method is not from a class mentioned in exclude_from_classes, for consistency */ @@ -4030,7 +4034,9 @@ static void zend_traits_init_trait_structures(zend_class_entry *ce TSRMLS_DC) /* /** For all aliases with an explicit class name, resolve the class now. */ if (ce->trait_aliases[i]->trait_method->class_name) { cur_method_ref = ce->trait_aliases[i]->trait_method; - cur_method_ref->ce = zend_fetch_class(cur_method_ref->class_name, cur_method_ref->cname_len, ZEND_FETCH_CLASS_TRAIT TSRMLS_CC); + if (!(cur_method_ref->ce = zend_fetch_class(cur_method_ref->class_name, cur_method_ref->cname_len, ZEND_FETCH_CLASS_TRAIT|ZEND_FETCH_CLASS_NO_AUTOLOAD TSRMLS_CC))) { + zend_error(E_COMPILE_ERROR, "Could not find trait %s", cur_method_ref->class_name); + } /** And, ensure that the referenced method is resolvable, too. */ lcname = zend_str_tolower_dup(cur_method_ref->method_name, diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index f5567ea990..9d475a688c 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2412,6 +2412,10 @@ ZEND_VM_HANDLER(59, ZEND_INIT_FCALL_BY_NAME, ANY, CONST|TMP|VAR|CV) zend_hash_index_find(Z_ARRVAL_P(function_name), 0, (void **) &obj); zend_hash_index_find(Z_ARRVAL_P(function_name), 1, (void **) &method); + if (!obj || !method) { + zend_error_noreturn(E_ERROR, "Array callback has to contain indices 0 and 1"); + } + if (Z_TYPE_PP(obj) != IS_STRING && Z_TYPE_PP(obj) != IS_OBJECT) { zend_error_noreturn(E_ERROR, "First array member is not a valid class name or object"); } diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 78f3d8496d..4abe6503cd 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -1256,6 +1256,10 @@ static int ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE zend_hash_index_find(Z_ARRVAL_P(function_name), 0, (void **) &obj); zend_hash_index_find(Z_ARRVAL_P(function_name), 1, (void **) &method); + if (!obj || !method) { + zend_error_noreturn(E_ERROR, "Array callback has to contain indices 0 and 1"); + } + if (Z_TYPE_PP(obj) != IS_STRING && Z_TYPE_PP(obj) != IS_OBJECT) { zend_error_noreturn(E_ERROR, "First array member is not a valid class name or object"); } @@ -1558,6 +1562,10 @@ static int ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER(ZEND_OPCODE_H zend_hash_index_find(Z_ARRVAL_P(function_name), 0, (void **) &obj); zend_hash_index_find(Z_ARRVAL_P(function_name), 1, (void **) &method); + if (!obj || !method) { + zend_error_noreturn(E_ERROR, "Array callback has to contain indices 0 and 1"); + } + if (Z_TYPE_PP(obj) != IS_STRING && Z_TYPE_PP(obj) != IS_OBJECT) { zend_error_noreturn(E_ERROR, "First array member is not a valid class name or object"); } @@ -1722,6 +1730,10 @@ static int ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER(ZEND_OPCODE_H zend_hash_index_find(Z_ARRVAL_P(function_name), 0, (void **) &obj); zend_hash_index_find(Z_ARRVAL_P(function_name), 1, (void **) &method); + if (!obj || !method) { + zend_error_noreturn(E_ERROR, "Array callback has to contain indices 0 and 1"); + } + if (Z_TYPE_PP(obj) != IS_STRING && Z_TYPE_PP(obj) != IS_OBJECT) { zend_error_noreturn(E_ERROR, "First array member is not a valid class name or object"); } @@ -1919,6 +1931,10 @@ static int ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HA zend_hash_index_find(Z_ARRVAL_P(function_name), 0, (void **) &obj); zend_hash_index_find(Z_ARRVAL_P(function_name), 1, (void **) &method); + if (!obj || !method) { + zend_error_noreturn(E_ERROR, "Array callback has to contain indices 0 and 1"); + } + if (Z_TYPE_PP(obj) != IS_STRING && Z_TYPE_PP(obj) != IS_OBJECT) { zend_error_noreturn(E_ERROR, "First array member is not a valid class name or object"); } diff --git a/configure.in b/configure.in index b03f6cc8c0..afe470d30a 100644 --- a/configure.in +++ b/configure.in @@ -119,7 +119,7 @@ int zend_sprintf(char *buffer, const char *format, ...); PHP_MAJOR_VERSION=5 PHP_MINOR_VERSION=4 -PHP_RELEASE_VERSION=8 +PHP_RELEASE_VERSION=9 PHP_EXTRA_VERSION="-dev" PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION" PHP_VERSION_ID=`expr [$]PHP_MAJOR_VERSION \* 10000 + [$]PHP_MINOR_VERSION \* 100 + [$]PHP_RELEASE_VERSION` diff --git a/ext/curl/streams.c b/ext/curl/streams.c index 19328d886c..821c2ecad8 100644 --- a/ext/curl/streams.c +++ b/ext/curl/streams.c @@ -162,6 +162,10 @@ static size_t php_curl_stream_read(php_stream *stream, char *buf, size_t count T } do { + FD_ZERO(&curlstream->readfds); + FD_ZERO(&curlstream->writefds); + FD_ZERO(&curlstream->excfds); + /* get the descriptors from curl */ curl_multi_fdset(curlstream->multi, &curlstream->readfds, &curlstream->writefds, &curlstream->excfds, &curlstream->maxfd); diff --git a/ext/date/lib/parse_date.c b/ext/date/lib/parse_date.c index 964f10d912..4829da6c91 100644 --- a/ext/date/lib/parse_date.c +++ b/ext/date/lib/parse_date.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.13.5 on Mon Dec 5 22:02:27 2011 */ +/* Generated by re2c 0.13.5 on Sun Sep 30 20:14:42 2012 */ #line 1 "ext/date/lib/parse_date.re" /* +----------------------------------------------------------------------+ @@ -995,7 +995,7 @@ std: } yy2: YYDEBUG(2, *YYCURSOR); -#line 1082 "ext/date/lib/parse_date.re" +#line 1083 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("firstdayof | lastdayof"); TIMELIB_INIT; @@ -1034,7 +1034,7 @@ yy3: } yy4: YYDEBUG(4, *YYCURSOR); -#line 1676 "ext/date/lib/parse_date.re" +#line 1677 "ext/date/lib/parse_date.re" { int tz_not_found; DEBUG_OUTPUT("tzcorrection | tz"); @@ -1358,7 +1358,7 @@ yy12: if (yych <= '9') goto yy1385; yy13: YYDEBUG(13, *YYCURSOR); -#line 1771 "ext/date/lib/parse_date.re" +#line 1772 "ext/date/lib/parse_date.re" { add_error(s, "Unexpected character"); goto std; @@ -2420,7 +2420,7 @@ yy49: if (yych <= '9') goto yy55; yy50: YYDEBUG(50, *YYCURSOR); -#line 1760 "ext/date/lib/parse_date.re" +#line 1761 "ext/date/lib/parse_date.re" { goto std; } @@ -2433,7 +2433,7 @@ yy52: YYDEBUG(52, *YYCURSOR); ++YYCURSOR; YYDEBUG(53, *YYCURSOR); -#line 1765 "ext/date/lib/parse_date.re" +#line 1766 "ext/date/lib/parse_date.re" { s->pos = cursor; s->line++; goto std; @@ -2825,7 +2825,7 @@ yy72: if (yych == 's') goto yy74; yy73: YYDEBUG(73, *YYCURSOR); -#line 1744 "ext/date/lib/parse_date.re" +#line 1745 "ext/date/lib/parse_date.re" { timelib_ull i; DEBUG_OUTPUT("relative"); @@ -3602,7 +3602,7 @@ yy166: } yy167: YYDEBUG(167, *YYCURSOR); -#line 1607 "ext/date/lib/parse_date.re" +#line 1608 "ext/date/lib/parse_date.re" { const timelib_relunit* relunit; DEBUG_OUTPUT("daytext"); @@ -4139,7 +4139,7 @@ yy193: } yy194: YYDEBUG(194, *YYCURSOR); -#line 1666 "ext/date/lib/parse_date.re" +#line 1667 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("monthtext"); TIMELIB_INIT; @@ -4199,7 +4199,7 @@ yy198: } yy199: YYDEBUG(199, *YYCURSOR); -#line 1412 "ext/date/lib/parse_date.re" +#line 1413 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("datetextual | datenoyear"); @@ -4481,7 +4481,7 @@ yy222: } yy223: YYDEBUG(223, *YYCURSOR); -#line 1714 "ext/date/lib/parse_date.re" +#line 1715 "ext/date/lib/parse_date.re" { int tz_not_found; DEBUG_OUTPUT("dateshortwithtimeshort | dateshortwithtimelong | dateshortwithtimelongtz"); @@ -5208,7 +5208,7 @@ yy278: YYDEBUG(278, *YYCURSOR); ++YYCURSOR; YYDEBUG(279, *YYCURSOR); -#line 1690 "ext/date/lib/parse_date.re" +#line 1691 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("dateshortwithtimeshort12 | dateshortwithtimelong12"); TIMELIB_INIT; @@ -5409,7 +5409,7 @@ yy294: ++YYCURSOR; yy295: YYDEBUG(295, *YYCURSOR); -#line 1384 "ext/date/lib/parse_date.re" +#line 1385 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("datenoday"); @@ -6642,7 +6642,7 @@ yy362: if (yych <= '9') goto yy365; yy364: YYDEBUG(364, *YYCURSOR); -#line 1528 "ext/date/lib/parse_date.re" +#line 1529 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("pgtextshort"); @@ -7293,7 +7293,7 @@ yy392: } yy393: YYDEBUG(393, *YYCURSOR); -#line 1586 "ext/date/lib/parse_date.re" +#line 1587 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("ago"); TIMELIB_INIT; @@ -9063,7 +9063,7 @@ yy454: ++YYCURSOR; yy455: YYDEBUG(455, *YYCURSOR); -#line 1289 "ext/date/lib/parse_date.re" +#line 1290 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("iso8601date4 | iso8601date2 | iso8601dateslash | dateslash"); TIMELIB_INIT; @@ -9634,7 +9634,7 @@ yy475: } yy476: YYDEBUG(476, *YYCURSOR); -#line 1426 "ext/date/lib/parse_date.re" +#line 1427 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("datenoyearrev"); TIMELIB_INIT; @@ -9786,7 +9786,7 @@ yy488: YYDEBUG(488, *YYCURSOR); ++YYCURSOR; YYDEBUG(489, *YYCURSOR); -#line 1144 "ext/date/lib/parse_date.re" +#line 1145 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("timetiny12 | timeshort12 | timelong12"); TIMELIB_INIT; @@ -9815,7 +9815,7 @@ yy490: } yy491: YYDEBUG(491, *YYCURSOR); -#line 1181 "ext/date/lib/parse_date.re" +#line 1182 "ext/date/lib/parse_date.re" { int tz_not_found; DEBUG_OUTPUT("timeshort24 | timelong24 | iso8601long"); @@ -10150,7 +10150,7 @@ yy523: YYDEBUG(523, *YYCURSOR); ++YYCURSOR; YYDEBUG(524, *YYCURSOR); -#line 1161 "ext/date/lib/parse_date.re" +#line 1162 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("mssqltime"); TIMELIB_INIT; @@ -10275,7 +10275,7 @@ yy534: if (yych <= '9') goto yy541; yy535: YYDEBUG(535, *YYCURSOR); -#line 1343 "ext/date/lib/parse_date.re" +#line 1344 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("datefull"); @@ -11026,7 +11026,7 @@ yy605: YYDEBUG(606, *YYCURSOR); ++YYCURSOR; YYDEBUG(607, *YYCURSOR); -#line 1358 "ext/date/lib/parse_date.re" +#line 1359 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("pointed date YYYY"); TIMELIB_INIT; @@ -11073,7 +11073,7 @@ yy611: if (yych <= '9') goto yy605; yy612: YYDEBUG(612, *YYCURSOR); -#line 1370 "ext/date/lib/parse_date.re" +#line 1371 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("pointed date YY"); @@ -11727,7 +11727,7 @@ yy656: } yy657: YYDEBUG(657, *YYCURSOR); -#line 1329 "ext/date/lib/parse_date.re" +#line 1330 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("gnudateshort"); @@ -11846,7 +11846,7 @@ yy666: } yy667: YYDEBUG(667, *YYCURSOR); -#line 1273 "ext/date/lib/parse_date.re" +#line 1274 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("americanshort | american"); @@ -12094,7 +12094,7 @@ yy700: if (yych <= ':') goto yy704; yy701: YYDEBUG(701, *YYCURSOR); -#line 1556 "ext/date/lib/parse_date.re" +#line 1557 "ext/date/lib/parse_date.re" { int tz_not_found; DEBUG_OUTPUT("clf"); @@ -12666,7 +12666,7 @@ yy763: } yy764: YYDEBUG(764, *YYCURSOR); -#line 1301 "ext/date/lib/parse_date.re" +#line 1302 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("iso8601date2"); @@ -12718,7 +12718,7 @@ yy771: YYDEBUG(771, *YYCURSOR); ++YYCURSOR; YYDEBUG(772, *YYCURSOR); -#line 1542 "ext/date/lib/parse_date.re" +#line 1543 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("pgtextreverse"); @@ -12869,7 +12869,7 @@ yy783: } yy784: YYDEBUG(784, *YYCURSOR); -#line 1577 "ext/date/lib/parse_date.re" +#line 1578 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("year4"); TIMELIB_INIT; @@ -13028,7 +13028,7 @@ yy793: } yy794: YYDEBUG(794, *YYCURSOR); -#line 1398 "ext/date/lib/parse_date.re" +#line 1399 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("datenodayrev"); @@ -13256,7 +13256,7 @@ yy814: if (yych <= '7') goto yy817; yy815: YYDEBUG(815, *YYCURSOR); -#line 1509 "ext/date/lib/parse_date.re" +#line 1510 "ext/date/lib/parse_date.re" { timelib_sll w, d; DEBUG_OUTPUT("isoweek"); @@ -13284,7 +13284,7 @@ yy817: YYDEBUG(817, *YYCURSOR); ++YYCURSOR; YYDEBUG(818, *YYCURSOR); -#line 1490 "ext/date/lib/parse_date.re" +#line 1491 "ext/date/lib/parse_date.re" { timelib_sll w, d; DEBUG_OUTPUT("isoweekday"); @@ -13366,7 +13366,7 @@ yy821: } yy822: YYDEBUG(822, *YYCURSOR); -#line 1476 "ext/date/lib/parse_date.re" +#line 1477 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("pgydotd"); @@ -13482,7 +13482,7 @@ yy842: ++YYCURSOR; yy843: YYDEBUG(843, *YYCURSOR); -#line 1450 "ext/date/lib/parse_date.re" +#line 1451 "ext/date/lib/parse_date.re" { int tz_not_found; DEBUG_OUTPUT("xmlrpc | xmlrpcnocolon | soap | wddx | exif"); @@ -13769,7 +13769,7 @@ yy848: } yy849: YYDEBUG(849, *YYCURSOR); -#line 1438 "ext/date/lib/parse_date.re" +#line 1439 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("datenocolon"); TIMELIB_INIT; @@ -14700,7 +14700,7 @@ yy973: if (yych <= '9') goto yy996; yy974: YYDEBUG(974, *YYCURSOR); -#line 1315 "ext/date/lib/parse_date.re" +#line 1316 "ext/date/lib/parse_date.re" { int length = 0; DEBUG_OUTPUT("gnudateshorter"); @@ -15722,7 +15722,7 @@ yy1066: } yy1068: YYDEBUG(1068, *YYCURSOR); -#line 1207 "ext/date/lib/parse_date.re" +#line 1208 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("gnunocolon"); TIMELIB_INIT; @@ -15836,7 +15836,7 @@ yy1075: } yy1076: YYDEBUG(1076, *YYCURSOR); -#line 1253 "ext/date/lib/parse_date.re" +#line 1254 "ext/date/lib/parse_date.re" { int tz_not_found; DEBUG_OUTPUT("iso8601nocolon"); @@ -16753,7 +16753,7 @@ yy1117: } yy1118: YYDEBUG(1118, *YYCURSOR); -#line 1649 "ext/date/lib/parse_date.re" +#line 1650 "ext/date/lib/parse_date.re" { timelib_sll i; int behavior = 0; @@ -16820,7 +16820,7 @@ yy1126: YYDEBUG(1126, *YYCURSOR); ++YYCURSOR; YYDEBUG(1127, *YYCURSOR); -#line 1122 "ext/date/lib/parse_date.re" +#line 1123 "ext/date/lib/parse_date.re" { timelib_sll i; int behavior = 0; @@ -16949,7 +16949,7 @@ yy1141: } yy1142: YYDEBUG(1142, *YYCURSOR); -#line 1625 "ext/date/lib/parse_date.re" +#line 1626 "ext/date/lib/parse_date.re" { timelib_sll i; int behavior = 0; @@ -19649,7 +19649,7 @@ yy1294: goto yy1298; yy1295: YYDEBUG(1295, *YYCURSOR); -#line 1099 "ext/date/lib/parse_date.re" +#line 1100 "ext/date/lib/parse_date.re" { DEBUG_OUTPUT("backof | frontof"); TIMELIB_INIT; @@ -21382,11 +21382,12 @@ yy1387: s->time->is_localtime = 1; s->time->zone_type = TIMELIB_ZONETYPE_OFFSET; s->time->z = 0; + s->time->dst = 0; TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 21390 "ext/date/lib/parse_date.c" +#line 21391 "ext/date/lib/parse_date.c" yy1388: YYDEBUG(1388, *YYCURSOR); yych = *++YYCURSOR; @@ -21833,7 +21834,7 @@ yy1417: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 21837 "ext/date/lib/parse_date.c" +#line 21838 "ext/date/lib/parse_date.c" yy1418: YYDEBUG(1418, *YYCURSOR); yych = *++YYCURSOR; @@ -21877,7 +21878,7 @@ yy1420: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 21881 "ext/date/lib/parse_date.c" +#line 21882 "ext/date/lib/parse_date.c" yy1421: YYDEBUG(1421, *YYCURSOR); yych = *++YYCURSOR; @@ -23897,7 +23898,7 @@ yy1500: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 23901 "ext/date/lib/parse_date.c" +#line 23902 "ext/date/lib/parse_date.c" yy1501: YYDEBUG(1501, *YYCURSOR); yych = *++YYCURSOR; @@ -24047,7 +24048,7 @@ yy1508: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 24051 "ext/date/lib/parse_date.c" +#line 24052 "ext/date/lib/parse_date.c" yy1509: YYDEBUG(1509, *YYCURSOR); yyaccept = 0; @@ -24591,7 +24592,7 @@ yy1531: TIMELIB_DEINIT; return TIMELIB_RELATIVE; } -#line 24595 "ext/date/lib/parse_date.c" +#line 24596 "ext/date/lib/parse_date.c" yy1532: YYDEBUG(1532, *YYCURSOR); yyaccept = 0; @@ -24764,7 +24765,7 @@ yy1537: goto yy1531; } } -#line 1775 "ext/date/lib/parse_date.re" +#line 1776 "ext/date/lib/parse_date.re" } @@ -25070,6 +25071,7 @@ timelib_time *timelib_parse_from_format(char *format, char *string, int len, tim s->time->is_localtime = 1; s->time->zone_type = TIMELIB_ZONETYPE_OFFSET; s->time->z = 0; + s->time->dst = 0; break; case 'e': /* timezone */ diff --git a/ext/date/lib/parse_date.re b/ext/date/lib/parse_date.re index cca88580eb..5a8b6134b9 100644 --- a/ext/date/lib/parse_date.re +++ b/ext/date/lib/parse_date.re @@ -1073,6 +1073,7 @@ weekdayof = (reltextnumber|reltexttext) space (dayfull|dayabbr) space 'of s->time->is_localtime = 1; s->time->zone_type = TIMELIB_ZONETYPE_OFFSET; s->time->z = 0; + s->time->dst = 0; TIMELIB_DEINIT; return TIMELIB_RELATIVE; @@ -2077,6 +2078,7 @@ timelib_time *timelib_parse_from_format(char *format, char *string, int len, tim s->time->is_localtime = 1; s->time->zone_type = TIMELIB_ZONETYPE_OFFSET; s->time->z = 0; + s->time->dst = 0; break; case 'e': /* timezone */ diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h index 221181191e..cee077bab4 100644 --- a/ext/date/lib/timezonedb.h +++ b/ext/date/lib/timezonedb.h @@ -14,570 +14,570 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[576] = { { "Africa/Bujumbura" , 0x000571 }, { "Africa/Cairo" , 0x0005B5 }, { "Africa/Casablanca" , 0x000878 }, - { "Africa/Ceuta" , 0x000A6C }, - { "Africa/Conakry" , 0x000D73 }, - { "Africa/Dakar" , 0x000DDE }, - { "Africa/Dar_es_Salaam" , 0x000E44 }, - { "Africa/Djibouti" , 0x000EB1 }, - { "Africa/Douala" , 0x000F06 }, - { "Africa/El_Aaiun" , 0x000F5B }, - { "Africa/Freetown" , 0x000FC1 }, - { "Africa/Gaborone" , 0x0010D0 }, - { "Africa/Harare" , 0x00112B }, - { "Africa/Johannesburg" , 0x001180 }, - { "Africa/Juba" , 0x0011EE }, - { "Africa/Kampala" , 0x001301 }, - { "Africa/Khartoum" , 0x001380 }, - { "Africa/Kigali" , 0x001493 }, - { "Africa/Kinshasa" , 0x0014E8 }, - { "Africa/Lagos" , 0x001543 }, - { "Africa/Libreville" , 0x001598 }, - { "Africa/Lome" , 0x0015ED }, - { "Africa/Luanda" , 0x001631 }, - { "Africa/Lubumbashi" , 0x001686 }, - { "Africa/Lusaka" , 0x0016E1 }, - { "Africa/Malabo" , 0x001736 }, - { "Africa/Maputo" , 0x00179C }, - { "Africa/Maseru" , 0x0017F1 }, - { "Africa/Mbabane" , 0x001859 }, - { "Africa/Mogadishu" , 0x0018AF }, - { "Africa/Monrovia" , 0x00190A }, - { "Africa/Nairobi" , 0x001970 }, - { "Africa/Ndjamena" , 0x0019EF }, - { "Africa/Niamey" , 0x001A5B }, - { "Africa/Nouakchott" , 0x001ACE }, - { "Africa/Ouagadougou" , 0x001B39 }, - { "Africa/Porto-Novo" , 0x001B8E }, - { "Africa/Sao_Tome" , 0x001BF4 }, - { "Africa/Timbuktu" , 0x001C49 }, - { "Africa/Tripoli" , 0x001CB4 }, - { "Africa/Tunis" , 0x001DAE }, - { "Africa/Windhoek" , 0x001EC0 }, - { "America/Adak" , 0x002107 }, - { "America/Anchorage" , 0x00247D }, - { "America/Anguilla" , 0x0027F1 }, - { "America/Antigua" , 0x002846 }, - { "America/Araguaina" , 0x0028AC }, - { "America/Argentina/Buenos_Aires" , 0x002A07 }, - { "America/Argentina/Catamarca" , 0x002BB5 }, - { "America/Argentina/ComodRivadavia" , 0x002D76 }, - { "America/Argentina/Cordoba" , 0x002F1C }, - { "America/Argentina/Jujuy" , 0x0030F1 }, - { "America/Argentina/La_Rioja" , 0x0032A5 }, - { "America/Argentina/Mendoza" , 0x00345D }, - { "America/Argentina/Rio_Gallegos" , 0x00361D }, - { "America/Argentina/Salta" , 0x0037D2 }, - { "America/Argentina/San_Juan" , 0x00397E }, - { "America/Argentina/San_Luis" , 0x003B36 }, - { "America/Argentina/Tucuman" , 0x003CFC }, - { "America/Argentina/Ushuaia" , 0x003EB8 }, - { "America/Aruba" , 0x004073 }, - { "America/Asuncion" , 0x0040D9 }, - { "America/Atikokan" , 0x0043BE }, - { "America/Atka" , 0x004494 }, - { "America/Bahia" , 0x0047FA }, - { "America/Bahia_Banderas" , 0x004A8C }, - { "America/Barbados" , 0x004D05 }, - { "America/Belem" , 0x004D9F }, - { "America/Belize" , 0x004E9A }, - { "America/Blanc-Sablon" , 0x005016 }, - { "America/Boa_Vista" , 0x0050CA }, - { "America/Bogota" , 0x0051D3 }, - { "America/Boise" , 0x00523F }, - { "America/Buenos_Aires" , 0x0055D6 }, - { "America/Cambridge_Bay" , 0x00576F }, - { "America/Campo_Grande" , 0x005A97 }, - { "America/Cancun" , 0x005D86 }, - { "America/Caracas" , 0x005FC8 }, - { "America/Catamarca" , 0x00602F }, - { "America/Cayenne" , 0x0061D5 }, - { "America/Cayman" , 0x006237 }, - { "America/Chicago" , 0x00628C }, - { "America/Chihuahua" , 0x0067A3 }, - { "America/Coral_Harbour" , 0x006A0E }, - { "America/Cordoba" , 0x006AA0 }, - { "America/Costa_Rica" , 0x006C46 }, - { "America/Creston" , 0x006CD0 }, - { "America/Cuiaba" , 0x006D5C }, - { "America/Curacao" , 0x00703A }, - { "America/Danmarkshavn" , 0x0070A0 }, - { "America/Dawson" , 0x0071E4 }, - { "America/Dawson_Creek" , 0x007501 }, - { "America/Denver" , 0x0076DB }, - { "America/Detroit" , 0x007A61 }, - { "America/Dominica" , 0x007DC0 }, - { "America/Edmonton" , 0x007E15 }, - { "America/Eirunepe" , 0x0081CD }, - { "America/El_Salvador" , 0x0082E0 }, - { "America/Ensenada" , 0x008355 }, - { "America/Fort_Wayne" , 0x0087FC }, - { "America/Fortaleza" , 0x0086BE }, - { "America/Glace_Bay" , 0x008A66 }, - { "America/Godthab" , 0x008DDD }, - { "America/Goose_Bay" , 0x0090A1 }, - { "America/Grand_Turk" , 0x00955E }, - { "America/Grenada" , 0x00980D }, - { "America/Guadeloupe" , 0x009862 }, - { "America/Guatemala" , 0x0098B7 }, - { "America/Guayaquil" , 0x009940 }, - { "America/Guyana" , 0x00999D }, - { "America/Halifax" , 0x009A1E }, - { "America/Havana" , 0x009F34 }, - { "America/Hermosillo" , 0x00A2A7 }, - { "America/Indiana/Indianapolis" , 0x00A385 }, - { "America/Indiana/Knox" , 0x00A616 }, - { "America/Indiana/Marengo" , 0x00A9AD }, - { "America/Indiana/Petersburg" , 0x00AC53 }, - { "America/Indiana/Tell_City" , 0x00B1A0 }, - { "America/Indiana/Vevay" , 0x00B439 }, - { "America/Indiana/Vincennes" , 0x00B674 }, - { "America/Indiana/Winamac" , 0x00B928 }, - { "America/Indianapolis" , 0x00AF36 }, - { "America/Inuvik" , 0x00BBE1 }, - { "America/Iqaluit" , 0x00BED8 }, - { "America/Jamaica" , 0x00C1FA }, - { "America/Jujuy" , 0x00C2BF }, - { "America/Juneau" , 0x00C469 }, - { "America/Kentucky/Louisville" , 0x00C7E7 }, - { "America/Kentucky/Monticello" , 0x00CC05 }, - { "America/Knox_IN" , 0x00CF8A }, - { "America/Kralendijk" , 0x00D2FB }, - { "America/La_Paz" , 0x00D361 }, - { "America/Lima" , 0x00D3C8 }, - { "America/Los_Angeles" , 0x00D470 }, - { "America/Louisville" , 0x00D881 }, - { "America/Lower_Princes" , 0x00DC76 }, - { "America/Maceio" , 0x00DCDC }, - { "America/Managua" , 0x00DE16 }, - { "America/Manaus" , 0x00DEC9 }, - { "America/Marigot" , 0x00DFCB }, - { "America/Martinique" , 0x00E020 }, - { "America/Matamoros" , 0x00E08C }, - { "America/Mazatlan" , 0x00E2E5 }, - { "America/Mendoza" , 0x00E552 }, - { "America/Menominee" , 0x00E706 }, - { "America/Merida" , 0x00EA87 }, - { "America/Metlakatla" , 0x00ECC2 }, - { "America/Mexico_City" , 0x00EDFC }, - { "America/Miquelon" , 0x00F077 }, - { "America/Moncton" , 0x00F2E9 }, - { "America/Monterrey" , 0x00F780 }, - { "America/Montevideo" , 0x00F9E3 }, - { "America/Montreal" , 0x00FCF5 }, - { "America/Montserrat" , 0x01020B }, - { "America/Nassau" , 0x010260 }, - { "America/New_York" , 0x0105A5 }, - { "America/Nipigon" , 0x010AB0 }, - { "America/Nome" , 0x010E01 }, - { "America/Noronha" , 0x01117F }, - { "America/North_Dakota/Beulah" , 0x0112AF }, - { "America/North_Dakota/Center" , 0x011643 }, - { "America/North_Dakota/New_Salem" , 0x0119D7 }, - { "America/Ojinaga" , 0x011D80 }, - { "America/Panama" , 0x011FE1 }, - { "America/Pangnirtung" , 0x012036 }, - { "America/Paramaribo" , 0x01236C }, - { "America/Phoenix" , 0x0123FE }, - { "America/Port-au-Prince" , 0x0124AC }, - { "America/Port_of_Spain" , 0x0126D1 }, - { "America/Porto_Acre" , 0x0125D2 }, - { "America/Porto_Velho" , 0x012726 }, - { "America/Puerto_Rico" , 0x01281C }, - { "America/Rainy_River" , 0x012887 }, - { "America/Rankin_Inlet" , 0x012BBF }, - { "America/Recife" , 0x012EA5 }, - { "America/Regina" , 0x012FCF }, - { "America/Resolute" , 0x01318D }, - { "America/Rio_Branco" , 0x01347E }, - { "America/Rosario" , 0x013581 }, - { "America/Santa_Isabel" , 0x013727 }, - { "America/Santarem" , 0x013ACA }, - { "America/Santiago" , 0x013BCF }, - { "America/Santo_Domingo" , 0x013F78 }, - { "America/Sao_Paulo" , 0x01403E }, - { "America/Scoresbysund" , 0x01434D }, - { "America/Shiprock" , 0x01463B }, - { "America/Sitka" , 0x0149CA }, - { "America/St_Barthelemy" , 0x014D52 }, - { "America/St_Johns" , 0x014DA7 }, - { "America/St_Kitts" , 0x0152FA }, - { "America/St_Lucia" , 0x01534F }, - { "America/St_Thomas" , 0x0153A4 }, - { "America/St_Vincent" , 0x0153F9 }, - { "America/Swift_Current" , 0x01544E }, - { "America/Tegucigalpa" , 0x01556F }, - { "America/Thule" , 0x0155EE }, - { "America/Thunder_Bay" , 0x015835 }, - { "America/Tijuana" , 0x015B7E }, - { "America/Toronto" , 0x015F17 }, - { "America/Tortola" , 0x01642E }, - { "America/Vancouver" , 0x016483 }, - { "America/Virgin" , 0x0168C0 }, - { "America/Whitehorse" , 0x016915 }, - { "America/Winnipeg" , 0x016C32 }, - { "America/Yakutat" , 0x017072 }, - { "America/Yellowknife" , 0x0173DD }, - { "Antarctica/Casey" , 0x0176ED }, - { "Antarctica/Davis" , 0x01778A }, - { "Antarctica/DumontDUrville" , 0x01782B }, - { "Antarctica/Macquarie" , 0x0178BD }, - { "Antarctica/Mawson" , 0x017B37 }, - { "Antarctica/McMurdo" , 0x017BB3 }, - { "Antarctica/Palmer" , 0x017EB5 }, - { "Antarctica/Rothera" , 0x0181D1 }, - { "Antarctica/South_Pole" , 0x018247 }, - { "Antarctica/Syowa" , 0x01854F }, - { "Antarctica/Vostok" , 0x0185BD }, - { "Arctic/Longyearbyen" , 0x01862E }, - { "Asia/Aden" , 0x018960 }, - { "Asia/Almaty" , 0x0189B5 }, - { "Asia/Amman" , 0x018B34 }, - { "Asia/Anadyr" , 0x018DF4 }, - { "Asia/Aqtau" , 0x018FD9 }, - { "Asia/Aqtobe" , 0x0191D8 }, - { "Asia/Ashgabat" , 0x019390 }, - { "Asia/Ashkhabad" , 0x0194AD }, - { "Asia/Baghdad" , 0x0195CA }, - { "Asia/Bahrain" , 0x01973F }, - { "Asia/Baku" , 0x0197A5 }, - { "Asia/Bangkok" , 0x019A8D }, - { "Asia/Beirut" , 0x019AE2 }, - { "Asia/Bishkek" , 0x019DEF }, - { "Asia/Brunei" , 0x019F9B }, - { "Asia/Calcutta" , 0x019FFD }, - { "Asia/Choibalsan" , 0x01A076 }, - { "Asia/Chongqing" , 0x01A1EF }, - { "Asia/Chungking" , 0x01A2DE }, - { "Asia/Colombo" , 0x01A38D }, - { "Asia/Dacca" , 0x01A429 }, - { "Asia/Damascus" , 0x01A4CF }, - { "Asia/Dhaka" , 0x01A81F }, - { "Asia/Dili" , 0x01A8C5 }, - { "Asia/Dubai" , 0x01A94E }, - { "Asia/Dushanbe" , 0x01A9A3 }, - { "Asia/Gaza" , 0x01AAA6 }, - { "Asia/Harbin" , 0x01ACFF }, - { "Asia/Hebron" , 0x01ADE6 }, - { "Asia/Ho_Chi_Minh" , 0x01B048 }, - { "Asia/Hong_Kong" , 0x01B0C0 }, - { "Asia/Hovd" , 0x01B282 }, - { "Asia/Irkutsk" , 0x01B3FA }, - { "Asia/Istanbul" , 0x01B5E0 }, - { "Asia/Jakarta" , 0x01B9CD }, - { "Asia/Jayapura" , 0x01BA77 }, - { "Asia/Jerusalem" , 0x01BB13 }, - { "Asia/Kabul" , 0x01BE42 }, - { "Asia/Kamchatka" , 0x01BE93 }, - { "Asia/Karachi" , 0x01C06F }, - { "Asia/Kashgar" , 0x01C124 }, - { "Asia/Kathmandu" , 0x01C1F5 }, - { "Asia/Katmandu" , 0x01C25B }, - { "Asia/Kolkata" , 0x01C2C1 }, - { "Asia/Krasnoyarsk" , 0x01C33A }, - { "Asia/Kuala_Lumpur" , 0x01C522 }, - { "Asia/Kuching" , 0x01C5DF }, - { "Asia/Kuwait" , 0x01C6CD }, - { "Asia/Macao" , 0x01C722 }, - { "Asia/Macau" , 0x01C85D }, - { "Asia/Magadan" , 0x01C998 }, - { "Asia/Makassar" , 0x01CB7A }, - { "Asia/Manila" , 0x01CC3E }, - { "Asia/Muscat" , 0x01CCC3 }, - { "Asia/Nicosia" , 0x01CD18 }, - { "Asia/Novokuznetsk" , 0x01D000 }, - { "Asia/Novosibirsk" , 0x01D202 }, - { "Asia/Omsk" , 0x01D3ED }, - { "Asia/Oral" , 0x01D5D4 }, - { "Asia/Phnom_Penh" , 0x01D7A4 }, - { "Asia/Pontianak" , 0x01D81C }, - { "Asia/Pyongyang" , 0x01D8DD }, - { "Asia/Qatar" , 0x01D94A }, - { "Asia/Qyzylorda" , 0x01D9B0 }, - { "Asia/Rangoon" , 0x01DB86 }, - { "Asia/Riyadh" , 0x01DBFE }, - { "Asia/Saigon" , 0x01DC53 }, - { "Asia/Sakhalin" , 0x01DCCB }, - { "Asia/Samarkand" , 0x01DEC2 }, - { "Asia/Seoul" , 0x01DFF8 }, - { "Asia/Shanghai" , 0x01E09C }, - { "Asia/Singapore" , 0x01E17C }, - { "Asia/Taipei" , 0x01E233 }, - { "Asia/Tashkent" , 0x01E34B }, - { "Asia/Tbilisi" , 0x01E47C }, - { "Asia/Tehran" , 0x01E636 }, - { "Asia/Tel_Aviv" , 0x01E8A4 }, - { "Asia/Thimbu" , 0x01EBD3 }, - { "Asia/Thimphu" , 0x01EC39 }, - { "Asia/Tokyo" , 0x01EC9F }, - { "Asia/Ujung_Pandang" , 0x01ED28 }, - { "Asia/Ulaanbaatar" , 0x01EDA4 }, - { "Asia/Ulan_Bator" , 0x01EEFF }, - { "Asia/Urumqi" , 0x01F04C }, - { "Asia/Vientiane" , 0x01F113 }, - { "Asia/Vladivostok" , 0x01F18B }, - { "Asia/Yakutsk" , 0x01F377 }, - { "Asia/Yekaterinburg" , 0x01F55C }, - { "Asia/Yerevan" , 0x01F767 }, - { "Atlantic/Azores" , 0x01F967 }, - { "Atlantic/Bermuda" , 0x01FE6A }, - { "Atlantic/Canary" , 0x02014B }, - { "Atlantic/Cape_Verde" , 0x020421 }, - { "Atlantic/Faeroe" , 0x02049A }, - { "Atlantic/Faroe" , 0x02073E }, - { "Atlantic/Jan_Mayen" , 0x0209E2 }, - { "Atlantic/Madeira" , 0x020D14 }, - { "Atlantic/Reykjavik" , 0x02121D }, - { "Atlantic/South_Georgia" , 0x0213D6 }, - { "Atlantic/St_Helena" , 0x0215E8 }, - { "Atlantic/Stanley" , 0x02141A }, - { "Australia/ACT" , 0x02163D }, - { "Australia/Adelaide" , 0x02195A }, - { "Australia/Brisbane" , 0x021C86 }, - { "Australia/Broken_Hill" , 0x021D4D }, - { "Australia/Canberra" , 0x02208B }, - { "Australia/Currie" , 0x0223A8 }, - { "Australia/Darwin" , 0x0226DB }, - { "Australia/Eucla" , 0x022761 }, - { "Australia/Hobart" , 0x022836 }, - { "Australia/LHI" , 0x022B94 }, - { "Australia/Lindeman" , 0x022E2F }, - { "Australia/Lord_Howe" , 0x022F10 }, - { "Australia/Melbourne" , 0x0231BB }, - { "Australia/North" , 0x0234E0 }, - { "Australia/NSW" , 0x023554 }, - { "Australia/Perth" , 0x023871 }, - { "Australia/Queensland" , 0x023949 }, - { "Australia/South" , 0x0239F5 }, - { "Australia/Sydney" , 0x023D12 }, - { "Australia/Tasmania" , 0x02404F }, - { "Australia/Victoria" , 0x024394 }, - { "Australia/West" , 0x0246B1 }, - { "Australia/Yancowinna" , 0x024767 }, - { "Brazil/Acre" , 0x024A89 }, - { "Brazil/DeNoronha" , 0x024B88 }, - { "Brazil/East" , 0x024CA8 }, - { "Brazil/West" , 0x024F85 }, - { "Canada/Atlantic" , 0x02507D }, - { "Canada/Central" , 0x025565 }, - { "Canada/East-Saskatchewan" , 0x025E6F }, - { "Canada/Eastern" , 0x02597F }, - { "Canada/Mountain" , 0x025FF8 }, - { "Canada/Newfoundland" , 0x02636E }, - { "Canada/Pacific" , 0x026899 }, - { "Canada/Saskatchewan" , 0x026CB2 }, - { "Canada/Yukon" , 0x026E3B }, - { "CET" , 0x02713E }, - { "Chile/Continental" , 0x027447 }, - { "Chile/EasterIsland" , 0x0277E2 }, - { "CST6CDT" , 0x027B24 }, - { "Cuba" , 0x027E75 }, - { "EET" , 0x0281E8 }, - { "Egypt" , 0x02849B }, - { "Eire" , 0x02875E }, - { "EST" , 0x028C6F }, - { "EST5EDT" , 0x028CB3 }, - { "Etc/GMT" , 0x029004 }, - { "Etc/GMT+0" , 0x0290D0 }, - { "Etc/GMT+1" , 0x02915A }, - { "Etc/GMT+10" , 0x0291E7 }, - { "Etc/GMT+11" , 0x029275 }, - { "Etc/GMT+12" , 0x029303 }, - { "Etc/GMT+2" , 0x02941E }, - { "Etc/GMT+3" , 0x0294AA }, - { "Etc/GMT+4" , 0x029536 }, - { "Etc/GMT+5" , 0x0295C2 }, - { "Etc/GMT+6" , 0x02964E }, - { "Etc/GMT+7" , 0x0296DA }, - { "Etc/GMT+8" , 0x029766 }, - { "Etc/GMT+9" , 0x0297F2 }, - { "Etc/GMT-0" , 0x02908C }, - { "Etc/GMT-1" , 0x029114 }, - { "Etc/GMT-10" , 0x0291A0 }, - { "Etc/GMT-11" , 0x02922E }, - { "Etc/GMT-12" , 0x0292BC }, - { "Etc/GMT-13" , 0x02934A }, - { "Etc/GMT-14" , 0x029391 }, - { "Etc/GMT-2" , 0x0293D8 }, - { "Etc/GMT-3" , 0x029464 }, - { "Etc/GMT-4" , 0x0294F0 }, - { "Etc/GMT-5" , 0x02957C }, - { "Etc/GMT-6" , 0x029608 }, - { "Etc/GMT-7" , 0x029694 }, - { "Etc/GMT-8" , 0x029720 }, - { "Etc/GMT-9" , 0x0297AC }, - { "Etc/GMT0" , 0x029048 }, - { "Etc/Greenwich" , 0x029838 }, - { "Etc/UCT" , 0x02987C }, - { "Etc/Universal" , 0x0298C0 }, - { "Etc/UTC" , 0x029904 }, - { "Etc/Zulu" , 0x029948 }, - { "Europe/Amsterdam" , 0x02998C }, - { "Europe/Andorra" , 0x029DCA }, - { "Europe/Athens" , 0x02A046 }, - { "Europe/Belfast" , 0x02A389 }, - { "Europe/Belgrade" , 0x02A8C0 }, - { "Europe/Berlin" , 0x02AB89 }, - { "Europe/Bratislava" , 0x02AEDF }, - { "Europe/Brussels" , 0x02B211 }, - { "Europe/Bucharest" , 0x02B648 }, - { "Europe/Budapest" , 0x02B972 }, - { "Europe/Chisinau" , 0x02BCE5 }, - { "Europe/Copenhagen" , 0x02C073 }, - { "Europe/Dublin" , 0x02C37D }, - { "Europe/Gibraltar" , 0x02C88E }, - { "Europe/Guernsey" , 0x02CCE5 }, - { "Europe/Helsinki" , 0x02D21C }, - { "Europe/Isle_of_Man" , 0x02D4D2 }, - { "Europe/Istanbul" , 0x02DA09 }, - { "Europe/Jersey" , 0x02DDF6 }, - { "Europe/Kaliningrad" , 0x02E32D }, - { "Europe/Kiev" , 0x02E593 }, - { "Europe/Lisbon" , 0x02E8AA }, - { "Europe/Ljubljana" , 0x02EDAE }, - { "Europe/London" , 0x02F077 }, - { "Europe/Luxembourg" , 0x02F5AE }, - { "Europe/Madrid" , 0x02FA04 }, - { "Europe/Malta" , 0x02FDCA }, - { "Europe/Mariehamn" , 0x030183 }, - { "Europe/Minsk" , 0x030439 }, - { "Europe/Monaco" , 0x030647 }, - { "Europe/Moscow" , 0x030A82 }, - { "Europe/Nicosia" , 0x030CD3 }, - { "Europe/Oslo" , 0x030FBB }, - { "Europe/Paris" , 0x0312ED }, - { "Europe/Podgorica" , 0x031733 }, - { "Europe/Prague" , 0x0319FC }, - { "Europe/Riga" , 0x031D2E }, - { "Europe/Rome" , 0x032073 }, - { "Europe/Samara" , 0x032436 }, - { "Europe/San_Marino" , 0x032669 }, - { "Europe/Sarajevo" , 0x032A2C }, - { "Europe/Simferopol" , 0x032CF5 }, - { "Europe/Skopje" , 0x033020 }, - { "Europe/Sofia" , 0x0332E9 }, - { "Europe/Stockholm" , 0x0335F1 }, - { "Europe/Tallinn" , 0x0338A0 }, - { "Europe/Tirane" , 0x033BDA }, - { "Europe/Tiraspol" , 0x033EE0 }, - { "Europe/Uzhgorod" , 0x03426E }, - { "Europe/Vaduz" , 0x034585 }, - { "Europe/Vatican" , 0x034818 }, - { "Europe/Vienna" , 0x034BDB }, - { "Europe/Vilnius" , 0x034F08 }, - { "Europe/Volgograd" , 0x035247 }, - { "Europe/Warsaw" , 0x035447 }, - { "Europe/Zagreb" , 0x035828 }, - { "Europe/Zaporozhye" , 0x035AF1 }, - { "Europe/Zurich" , 0x035E32 }, - { "Factory" , 0x0360E1 }, - { "GB" , 0x036152 }, - { "GB-Eire" , 0x036689 }, - { "GMT" , 0x036BC0 }, - { "GMT+0" , 0x036C8C }, - { "GMT-0" , 0x036C48 }, - { "GMT0" , 0x036C04 }, - { "Greenwich" , 0x036CD0 }, - { "Hongkong" , 0x036D14 }, - { "HST" , 0x036ED6 }, - { "Iceland" , 0x036F1A }, - { "Indian/Antananarivo" , 0x0370D3 }, - { "Indian/Chagos" , 0x037147 }, - { "Indian/Christmas" , 0x0371A9 }, - { "Indian/Cocos" , 0x0371ED }, - { "Indian/Comoro" , 0x037231 }, - { "Indian/Kerguelen" , 0x037286 }, - { "Indian/Mahe" , 0x0372DB }, - { "Indian/Maldives" , 0x037330 }, - { "Indian/Mauritius" , 0x037385 }, - { "Indian/Mayotte" , 0x0373FB }, - { "Indian/Reunion" , 0x037450 }, - { "Iran" , 0x0374A5 }, - { "Israel" , 0x037713 }, - { "Jamaica" , 0x037A42 }, - { "Japan" , 0x037B07 }, - { "Kwajalein" , 0x037B90 }, - { "Libya" , 0x037BF3 }, - { "MET" , 0x037CED }, - { "Mexico/BajaNorte" , 0x037FF6 }, - { "Mexico/BajaSur" , 0x03835F }, - { "Mexico/General" , 0x0385A4 }, - { "MST" , 0x038802 }, - { "MST7MDT" , 0x038846 }, - { "Navajo" , 0x038B97 }, - { "NZ" , 0x038F10 }, - { "NZ-CHAT" , 0x03928E }, - { "Pacific/Apia" , 0x039576 }, - { "Pacific/Auckland" , 0x039613 }, - { "Pacific/Chatham" , 0x03999F }, - { "Pacific/Chuuk" , 0x039C96 }, - { "Pacific/Easter" , 0x039CEF }, - { "Pacific/Efate" , 0x03A04D }, - { "Pacific/Enderbury" , 0x03A113 }, - { "Pacific/Fakaofo" , 0x03A181 }, - { "Pacific/Fiji" , 0x03A1D2 }, - { "Pacific/Funafuti" , 0x03A266 }, - { "Pacific/Galapagos" , 0x03A2AA }, - { "Pacific/Gambier" , 0x03A322 }, - { "Pacific/Guadalcanal" , 0x03A387 }, - { "Pacific/Guam" , 0x03A3DC }, - { "Pacific/Honolulu" , 0x03A432 }, - { "Pacific/Johnston" , 0x03A4A9 }, - { "Pacific/Kiritimati" , 0x03A4FB }, - { "Pacific/Kosrae" , 0x03A566 }, - { "Pacific/Kwajalein" , 0x03A5C3 }, - { "Pacific/Majuro" , 0x03A62F }, - { "Pacific/Marquesas" , 0x03A68E }, - { "Pacific/Midway" , 0x03A6F5 }, - { "Pacific/Nauru" , 0x03A77F }, - { "Pacific/Niue" , 0x03A7F7 }, - { "Pacific/Norfolk" , 0x03A855 }, - { "Pacific/Noumea" , 0x03A8AA }, - { "Pacific/Pago_Pago" , 0x03A93A }, - { "Pacific/Palau" , 0x03A9C3 }, - { "Pacific/Pitcairn" , 0x03AA07 }, - { "Pacific/Pohnpei" , 0x03AA5C }, - { "Pacific/Ponape" , 0x03AAB1 }, - { "Pacific/Port_Moresby" , 0x03AAF6 }, - { "Pacific/Rarotonga" , 0x03AB3A }, - { "Pacific/Saipan" , 0x03AC16 }, - { "Pacific/Samoa" , 0x03AC79 }, - { "Pacific/Tahiti" , 0x03AD02 }, - { "Pacific/Tarawa" , 0x03AD67 }, - { "Pacific/Tongatapu" , 0x03ADBB }, - { "Pacific/Truk" , 0x03AE47 }, - { "Pacific/Wake" , 0x03AE8C }, - { "Pacific/Wallis" , 0x03AEDC }, - { "Pacific/Yap" , 0x03AF20 }, - { "Poland" , 0x03AF65 }, - { "Portugal" , 0x03B346 }, - { "PRC" , 0x03B842 }, - { "PST8PDT" , 0x03B8F3 }, - { "ROC" , 0x03BC44 }, - { "ROK" , 0x03BD5C }, - { "Singapore" , 0x03BE00 }, - { "Turkey" , 0x03BEB7 }, - { "UCT" , 0x03C2A4 }, - { "Universal" , 0x03C2E8 }, - { "US/Alaska" , 0x03C32C }, - { "US/Aleutian" , 0x03C695 }, - { "US/Arizona" , 0x03C9FB }, - { "US/Central" , 0x03CA89 }, - { "US/East-Indiana" , 0x03D493 }, - { "US/Eastern" , 0x03CF94 }, - { "US/Hawaii" , 0x03D6FD }, - { "US/Indiana-Starke" , 0x03D76E }, - { "US/Michigan" , 0x03DADF }, - { "US/Mountain" , 0x03DE16 }, - { "US/Pacific" , 0x03E18F }, - { "US/Pacific-New" , 0x03E594 }, - { "US/Samoa" , 0x03E999 }, - { "UTC" , 0x03EA22 }, - { "W-SU" , 0x03ED19 }, - { "WET" , 0x03EA66 }, - { "Zulu" , 0x03EF53 }, + { "Africa/Ceuta" , 0x000A76 }, + { "Africa/Conakry" , 0x000D7D }, + { "Africa/Dakar" , 0x000DE8 }, + { "Africa/Dar_es_Salaam" , 0x000E4E }, + { "Africa/Djibouti" , 0x000EBB }, + { "Africa/Douala" , 0x000F10 }, + { "Africa/El_Aaiun" , 0x000F65 }, + { "Africa/Freetown" , 0x000FCB }, + { "Africa/Gaborone" , 0x0010DA }, + { "Africa/Harare" , 0x001135 }, + { "Africa/Johannesburg" , 0x00118A }, + { "Africa/Juba" , 0x0011F8 }, + { "Africa/Kampala" , 0x00130B }, + { "Africa/Khartoum" , 0x00138A }, + { "Africa/Kigali" , 0x00149D }, + { "Africa/Kinshasa" , 0x0014F2 }, + { "Africa/Lagos" , 0x00154D }, + { "Africa/Libreville" , 0x0015A2 }, + { "Africa/Lome" , 0x0015F7 }, + { "Africa/Luanda" , 0x00163B }, + { "Africa/Lubumbashi" , 0x001690 }, + { "Africa/Lusaka" , 0x0016EB }, + { "Africa/Malabo" , 0x001740 }, + { "Africa/Maputo" , 0x0017A6 }, + { "Africa/Maseru" , 0x0017FB }, + { "Africa/Mbabane" , 0x001863 }, + { "Africa/Mogadishu" , 0x0018B9 }, + { "Africa/Monrovia" , 0x001914 }, + { "Africa/Nairobi" , 0x00197A }, + { "Africa/Ndjamena" , 0x0019F9 }, + { "Africa/Niamey" , 0x001A65 }, + { "Africa/Nouakchott" , 0x001AD8 }, + { "Africa/Ouagadougou" , 0x001B43 }, + { "Africa/Porto-Novo" , 0x001B98 }, + { "Africa/Sao_Tome" , 0x001BFE }, + { "Africa/Timbuktu" , 0x001C53 }, + { "Africa/Tripoli" , 0x001CBE }, + { "Africa/Tunis" , 0x001DB8 }, + { "Africa/Windhoek" , 0x001ECA }, + { "America/Adak" , 0x002111 }, + { "America/Anchorage" , 0x002487 }, + { "America/Anguilla" , 0x0027FB }, + { "America/Antigua" , 0x002850 }, + { "America/Araguaina" , 0x0028B6 }, + { "America/Argentina/Buenos_Aires" , 0x002A11 }, + { "America/Argentina/Catamarca" , 0x002BBF }, + { "America/Argentina/ComodRivadavia" , 0x002D80 }, + { "America/Argentina/Cordoba" , 0x002F26 }, + { "America/Argentina/Jujuy" , 0x0030FB }, + { "America/Argentina/La_Rioja" , 0x0032AF }, + { "America/Argentina/Mendoza" , 0x003467 }, + { "America/Argentina/Rio_Gallegos" , 0x003627 }, + { "America/Argentina/Salta" , 0x0037DC }, + { "America/Argentina/San_Juan" , 0x003988 }, + { "America/Argentina/San_Luis" , 0x003B40 }, + { "America/Argentina/Tucuman" , 0x003D06 }, + { "America/Argentina/Ushuaia" , 0x003EC2 }, + { "America/Aruba" , 0x00407D }, + { "America/Asuncion" , 0x0040E3 }, + { "America/Atikokan" , 0x0043C8 }, + { "America/Atka" , 0x00449E }, + { "America/Bahia" , 0x004804 }, + { "America/Bahia_Banderas" , 0x004A96 }, + { "America/Barbados" , 0x004D0F }, + { "America/Belem" , 0x004DA9 }, + { "America/Belize" , 0x004EA4 }, + { "America/Blanc-Sablon" , 0x005020 }, + { "America/Boa_Vista" , 0x0050D4 }, + { "America/Bogota" , 0x0051DD }, + { "America/Boise" , 0x005249 }, + { "America/Buenos_Aires" , 0x0055E0 }, + { "America/Cambridge_Bay" , 0x005779 }, + { "America/Campo_Grande" , 0x005AA1 }, + { "America/Cancun" , 0x005D90 }, + { "America/Caracas" , 0x005FD2 }, + { "America/Catamarca" , 0x006039 }, + { "America/Cayenne" , 0x0061DF }, + { "America/Cayman" , 0x006241 }, + { "America/Chicago" , 0x006296 }, + { "America/Chihuahua" , 0x0067AD }, + { "America/Coral_Harbour" , 0x006A18 }, + { "America/Cordoba" , 0x006AAA }, + { "America/Costa_Rica" , 0x006C50 }, + { "America/Creston" , 0x006CDA }, + { "America/Cuiaba" , 0x006D66 }, + { "America/Curacao" , 0x007044 }, + { "America/Danmarkshavn" , 0x0070AA }, + { "America/Dawson" , 0x0071EE }, + { "America/Dawson_Creek" , 0x00750B }, + { "America/Denver" , 0x0076E5 }, + { "America/Detroit" , 0x007A6B }, + { "America/Dominica" , 0x007DCA }, + { "America/Edmonton" , 0x007E1F }, + { "America/Eirunepe" , 0x0081D7 }, + { "America/El_Salvador" , 0x0082EA }, + { "America/Ensenada" , 0x00835F }, + { "America/Fort_Wayne" , 0x008806 }, + { "America/Fortaleza" , 0x0086C8 }, + { "America/Glace_Bay" , 0x008A70 }, + { "America/Godthab" , 0x008DE7 }, + { "America/Goose_Bay" , 0x0090AB }, + { "America/Grand_Turk" , 0x009568 }, + { "America/Grenada" , 0x009817 }, + { "America/Guadeloupe" , 0x00986C }, + { "America/Guatemala" , 0x0098C1 }, + { "America/Guayaquil" , 0x00994A }, + { "America/Guyana" , 0x0099A7 }, + { "America/Halifax" , 0x009A28 }, + { "America/Havana" , 0x009F3E }, + { "America/Hermosillo" , 0x00A2B1 }, + { "America/Indiana/Indianapolis" , 0x00A38F }, + { "America/Indiana/Knox" , 0x00A620 }, + { "America/Indiana/Marengo" , 0x00A9B7 }, + { "America/Indiana/Petersburg" , 0x00AC5D }, + { "America/Indiana/Tell_City" , 0x00B1AA }, + { "America/Indiana/Vevay" , 0x00B443 }, + { "America/Indiana/Vincennes" , 0x00B67E }, + { "America/Indiana/Winamac" , 0x00B932 }, + { "America/Indianapolis" , 0x00AF40 }, + { "America/Inuvik" , 0x00BBEB }, + { "America/Iqaluit" , 0x00BEE2 }, + { "America/Jamaica" , 0x00C204 }, + { "America/Jujuy" , 0x00C2C9 }, + { "America/Juneau" , 0x00C473 }, + { "America/Kentucky/Louisville" , 0x00C7F1 }, + { "America/Kentucky/Monticello" , 0x00CC0F }, + { "America/Knox_IN" , 0x00CF94 }, + { "America/Kralendijk" , 0x00D305 }, + { "America/La_Paz" , 0x00D36B }, + { "America/Lima" , 0x00D3D2 }, + { "America/Los_Angeles" , 0x00D47A }, + { "America/Louisville" , 0x00D88B }, + { "America/Lower_Princes" , 0x00DC80 }, + { "America/Maceio" , 0x00DCE6 }, + { "America/Managua" , 0x00DE20 }, + { "America/Manaus" , 0x00DED3 }, + { "America/Marigot" , 0x00DFD5 }, + { "America/Martinique" , 0x00E02A }, + { "America/Matamoros" , 0x00E096 }, + { "America/Mazatlan" , 0x00E2EF }, + { "America/Mendoza" , 0x00E55C }, + { "America/Menominee" , 0x00E710 }, + { "America/Merida" , 0x00EA91 }, + { "America/Metlakatla" , 0x00ECCC }, + { "America/Mexico_City" , 0x00EE06 }, + { "America/Miquelon" , 0x00F081 }, + { "America/Moncton" , 0x00F2F3 }, + { "America/Monterrey" , 0x00F78A }, + { "America/Montevideo" , 0x00F9ED }, + { "America/Montreal" , 0x00FCFF }, + { "America/Montserrat" , 0x010215 }, + { "America/Nassau" , 0x01026A }, + { "America/New_York" , 0x0105AF }, + { "America/Nipigon" , 0x010ABA }, + { "America/Nome" , 0x010E0B }, + { "America/Noronha" , 0x011189 }, + { "America/North_Dakota/Beulah" , 0x0112B9 }, + { "America/North_Dakota/Center" , 0x01164D }, + { "America/North_Dakota/New_Salem" , 0x0119E1 }, + { "America/Ojinaga" , 0x011D8A }, + { "America/Panama" , 0x011FEB }, + { "America/Pangnirtung" , 0x012040 }, + { "America/Paramaribo" , 0x012376 }, + { "America/Phoenix" , 0x012408 }, + { "America/Port-au-Prince" , 0x0124B6 }, + { "America/Port_of_Spain" , 0x0126DB }, + { "America/Porto_Acre" , 0x0125DC }, + { "America/Porto_Velho" , 0x012730 }, + { "America/Puerto_Rico" , 0x012826 }, + { "America/Rainy_River" , 0x012891 }, + { "America/Rankin_Inlet" , 0x012BC9 }, + { "America/Recife" , 0x012EAF }, + { "America/Regina" , 0x012FD9 }, + { "America/Resolute" , 0x013197 }, + { "America/Rio_Branco" , 0x013488 }, + { "America/Rosario" , 0x01358B }, + { "America/Santa_Isabel" , 0x013731 }, + { "America/Santarem" , 0x013AD4 }, + { "America/Santiago" , 0x013BD9 }, + { "America/Santo_Domingo" , 0x013F82 }, + { "America/Sao_Paulo" , 0x014048 }, + { "America/Scoresbysund" , 0x014357 }, + { "America/Shiprock" , 0x014645 }, + { "America/Sitka" , 0x0149D4 }, + { "America/St_Barthelemy" , 0x014D5C }, + { "America/St_Johns" , 0x014DB1 }, + { "America/St_Kitts" , 0x015304 }, + { "America/St_Lucia" , 0x015359 }, + { "America/St_Thomas" , 0x0153AE }, + { "America/St_Vincent" , 0x015403 }, + { "America/Swift_Current" , 0x015458 }, + { "America/Tegucigalpa" , 0x015579 }, + { "America/Thule" , 0x0155F8 }, + { "America/Thunder_Bay" , 0x01583F }, + { "America/Tijuana" , 0x015B88 }, + { "America/Toronto" , 0x015F21 }, + { "America/Tortola" , 0x016438 }, + { "America/Vancouver" , 0x01648D }, + { "America/Virgin" , 0x0168CA }, + { "America/Whitehorse" , 0x01691F }, + { "America/Winnipeg" , 0x016C3C }, + { "America/Yakutat" , 0x01707C }, + { "America/Yellowknife" , 0x0173E7 }, + { "Antarctica/Casey" , 0x0176F7 }, + { "Antarctica/Davis" , 0x017794 }, + { "Antarctica/DumontDUrville" , 0x017835 }, + { "Antarctica/Macquarie" , 0x0178C7 }, + { "Antarctica/Mawson" , 0x017B41 }, + { "Antarctica/McMurdo" , 0x017BBD }, + { "Antarctica/Palmer" , 0x017EBF }, + { "Antarctica/Rothera" , 0x0181DB }, + { "Antarctica/South_Pole" , 0x018251 }, + { "Antarctica/Syowa" , 0x018559 }, + { "Antarctica/Vostok" , 0x0185C7 }, + { "Arctic/Longyearbyen" , 0x018638 }, + { "Asia/Aden" , 0x01896A }, + { "Asia/Almaty" , 0x0189BF }, + { "Asia/Amman" , 0x018B3E }, + { "Asia/Anadyr" , 0x018DFE }, + { "Asia/Aqtau" , 0x018FE3 }, + { "Asia/Aqtobe" , 0x0191E2 }, + { "Asia/Ashgabat" , 0x01939A }, + { "Asia/Ashkhabad" , 0x0194B7 }, + { "Asia/Baghdad" , 0x0195D4 }, + { "Asia/Bahrain" , 0x019749 }, + { "Asia/Baku" , 0x0197AF }, + { "Asia/Bangkok" , 0x019A97 }, + { "Asia/Beirut" , 0x019AEC }, + { "Asia/Bishkek" , 0x019DF9 }, + { "Asia/Brunei" , 0x019FA5 }, + { "Asia/Calcutta" , 0x01A007 }, + { "Asia/Choibalsan" , 0x01A080 }, + { "Asia/Chongqing" , 0x01A1F9 }, + { "Asia/Chungking" , 0x01A2E8 }, + { "Asia/Colombo" , 0x01A397 }, + { "Asia/Dacca" , 0x01A433 }, + { "Asia/Damascus" , 0x01A4D9 }, + { "Asia/Dhaka" , 0x01A829 }, + { "Asia/Dili" , 0x01A8CF }, + { "Asia/Dubai" , 0x01A958 }, + { "Asia/Dushanbe" , 0x01A9AD }, + { "Asia/Gaza" , 0x01AAB0 }, + { "Asia/Harbin" , 0x01AD09 }, + { "Asia/Hebron" , 0x01ADF0 }, + { "Asia/Ho_Chi_Minh" , 0x01B052 }, + { "Asia/Hong_Kong" , 0x01B0CA }, + { "Asia/Hovd" , 0x01B28C }, + { "Asia/Irkutsk" , 0x01B404 }, + { "Asia/Istanbul" , 0x01B5EA }, + { "Asia/Jakarta" , 0x01B9D7 }, + { "Asia/Jayapura" , 0x01BA81 }, + { "Asia/Jerusalem" , 0x01BB1D }, + { "Asia/Kabul" , 0x01BE4C }, + { "Asia/Kamchatka" , 0x01BE9D }, + { "Asia/Karachi" , 0x01C079 }, + { "Asia/Kashgar" , 0x01C12E }, + { "Asia/Kathmandu" , 0x01C1FF }, + { "Asia/Katmandu" , 0x01C265 }, + { "Asia/Kolkata" , 0x01C2CB }, + { "Asia/Krasnoyarsk" , 0x01C344 }, + { "Asia/Kuala_Lumpur" , 0x01C52C }, + { "Asia/Kuching" , 0x01C5E9 }, + { "Asia/Kuwait" , 0x01C6D7 }, + { "Asia/Macao" , 0x01C72C }, + { "Asia/Macau" , 0x01C867 }, + { "Asia/Magadan" , 0x01C9A2 }, + { "Asia/Makassar" , 0x01CB84 }, + { "Asia/Manila" , 0x01CC48 }, + { "Asia/Muscat" , 0x01CCCD }, + { "Asia/Nicosia" , 0x01CD22 }, + { "Asia/Novokuznetsk" , 0x01D00A }, + { "Asia/Novosibirsk" , 0x01D20C }, + { "Asia/Omsk" , 0x01D3F7 }, + { "Asia/Oral" , 0x01D5DE }, + { "Asia/Phnom_Penh" , 0x01D7AE }, + { "Asia/Pontianak" , 0x01D826 }, + { "Asia/Pyongyang" , 0x01D8E7 }, + { "Asia/Qatar" , 0x01D954 }, + { "Asia/Qyzylorda" , 0x01D9BA }, + { "Asia/Rangoon" , 0x01DB90 }, + { "Asia/Riyadh" , 0x01DC08 }, + { "Asia/Saigon" , 0x01DC5D }, + { "Asia/Sakhalin" , 0x01DCD5 }, + { "Asia/Samarkand" , 0x01DECC }, + { "Asia/Seoul" , 0x01E002 }, + { "Asia/Shanghai" , 0x01E0A6 }, + { "Asia/Singapore" , 0x01E186 }, + { "Asia/Taipei" , 0x01E23D }, + { "Asia/Tashkent" , 0x01E355 }, + { "Asia/Tbilisi" , 0x01E486 }, + { "Asia/Tehran" , 0x01E640 }, + { "Asia/Tel_Aviv" , 0x01E8AE }, + { "Asia/Thimbu" , 0x01EBDD }, + { "Asia/Thimphu" , 0x01EC43 }, + { "Asia/Tokyo" , 0x01ECA9 }, + { "Asia/Ujung_Pandang" , 0x01ED32 }, + { "Asia/Ulaanbaatar" , 0x01EDAE }, + { "Asia/Ulan_Bator" , 0x01EF09 }, + { "Asia/Urumqi" , 0x01F056 }, + { "Asia/Vientiane" , 0x01F11D }, + { "Asia/Vladivostok" , 0x01F195 }, + { "Asia/Yakutsk" , 0x01F381 }, + { "Asia/Yekaterinburg" , 0x01F566 }, + { "Asia/Yerevan" , 0x01F771 }, + { "Atlantic/Azores" , 0x01F971 }, + { "Atlantic/Bermuda" , 0x01FE74 }, + { "Atlantic/Canary" , 0x020155 }, + { "Atlantic/Cape_Verde" , 0x02042B }, + { "Atlantic/Faeroe" , 0x0204A4 }, + { "Atlantic/Faroe" , 0x020748 }, + { "Atlantic/Jan_Mayen" , 0x0209EC }, + { "Atlantic/Madeira" , 0x020D1E }, + { "Atlantic/Reykjavik" , 0x021227 }, + { "Atlantic/South_Georgia" , 0x0213E0 }, + { "Atlantic/St_Helena" , 0x0215F2 }, + { "Atlantic/Stanley" , 0x021424 }, + { "Australia/ACT" , 0x021647 }, + { "Australia/Adelaide" , 0x021964 }, + { "Australia/Brisbane" , 0x021C90 }, + { "Australia/Broken_Hill" , 0x021D57 }, + { "Australia/Canberra" , 0x022095 }, + { "Australia/Currie" , 0x0223B2 }, + { "Australia/Darwin" , 0x0226E5 }, + { "Australia/Eucla" , 0x02276B }, + { "Australia/Hobart" , 0x022840 }, + { "Australia/LHI" , 0x022B9E }, + { "Australia/Lindeman" , 0x022E39 }, + { "Australia/Lord_Howe" , 0x022F1A }, + { "Australia/Melbourne" , 0x0231C5 }, + { "Australia/North" , 0x0234EA }, + { "Australia/NSW" , 0x02355E }, + { "Australia/Perth" , 0x02387B }, + { "Australia/Queensland" , 0x023953 }, + { "Australia/South" , 0x0239FF }, + { "Australia/Sydney" , 0x023D1C }, + { "Australia/Tasmania" , 0x024059 }, + { "Australia/Victoria" , 0x02439E }, + { "Australia/West" , 0x0246BB }, + { "Australia/Yancowinna" , 0x024771 }, + { "Brazil/Acre" , 0x024A93 }, + { "Brazil/DeNoronha" , 0x024B92 }, + { "Brazil/East" , 0x024CB2 }, + { "Brazil/West" , 0x024F8F }, + { "Canada/Atlantic" , 0x025087 }, + { "Canada/Central" , 0x02556F }, + { "Canada/East-Saskatchewan" , 0x025E79 }, + { "Canada/Eastern" , 0x025989 }, + { "Canada/Mountain" , 0x026002 }, + { "Canada/Newfoundland" , 0x026378 }, + { "Canada/Pacific" , 0x0268A3 }, + { "Canada/Saskatchewan" , 0x026CBC }, + { "Canada/Yukon" , 0x026E45 }, + { "CET" , 0x027148 }, + { "Chile/Continental" , 0x027451 }, + { "Chile/EasterIsland" , 0x0277EC }, + { "CST6CDT" , 0x027B2E }, + { "Cuba" , 0x027E7F }, + { "EET" , 0x0281F2 }, + { "Egypt" , 0x0284A5 }, + { "Eire" , 0x028768 }, + { "EST" , 0x028C79 }, + { "EST5EDT" , 0x028CBD }, + { "Etc/GMT" , 0x02900E }, + { "Etc/GMT+0" , 0x0290DA }, + { "Etc/GMT+1" , 0x029164 }, + { "Etc/GMT+10" , 0x0291F1 }, + { "Etc/GMT+11" , 0x02927F }, + { "Etc/GMT+12" , 0x02930D }, + { "Etc/GMT+2" , 0x029428 }, + { "Etc/GMT+3" , 0x0294B4 }, + { "Etc/GMT+4" , 0x029540 }, + { "Etc/GMT+5" , 0x0295CC }, + { "Etc/GMT+6" , 0x029658 }, + { "Etc/GMT+7" , 0x0296E4 }, + { "Etc/GMT+8" , 0x029770 }, + { "Etc/GMT+9" , 0x0297FC }, + { "Etc/GMT-0" , 0x029096 }, + { "Etc/GMT-1" , 0x02911E }, + { "Etc/GMT-10" , 0x0291AA }, + { "Etc/GMT-11" , 0x029238 }, + { "Etc/GMT-12" , 0x0292C6 }, + { "Etc/GMT-13" , 0x029354 }, + { "Etc/GMT-14" , 0x02939B }, + { "Etc/GMT-2" , 0x0293E2 }, + { "Etc/GMT-3" , 0x02946E }, + { "Etc/GMT-4" , 0x0294FA }, + { "Etc/GMT-5" , 0x029586 }, + { "Etc/GMT-6" , 0x029612 }, + { "Etc/GMT-7" , 0x02969E }, + { "Etc/GMT-8" , 0x02972A }, + { "Etc/GMT-9" , 0x0297B6 }, + { "Etc/GMT0" , 0x029052 }, + { "Etc/Greenwich" , 0x029842 }, + { "Etc/UCT" , 0x029886 }, + { "Etc/Universal" , 0x0298CA }, + { "Etc/UTC" , 0x02990E }, + { "Etc/Zulu" , 0x029952 }, + { "Europe/Amsterdam" , 0x029996 }, + { "Europe/Andorra" , 0x029DD4 }, + { "Europe/Athens" , 0x02A050 }, + { "Europe/Belfast" , 0x02A393 }, + { "Europe/Belgrade" , 0x02A8CA }, + { "Europe/Berlin" , 0x02AB93 }, + { "Europe/Bratislava" , 0x02AEE9 }, + { "Europe/Brussels" , 0x02B21B }, + { "Europe/Bucharest" , 0x02B652 }, + { "Europe/Budapest" , 0x02B97C }, + { "Europe/Chisinau" , 0x02BCEF }, + { "Europe/Copenhagen" , 0x02C07D }, + { "Europe/Dublin" , 0x02C387 }, + { "Europe/Gibraltar" , 0x02C898 }, + { "Europe/Guernsey" , 0x02CCEF }, + { "Europe/Helsinki" , 0x02D226 }, + { "Europe/Isle_of_Man" , 0x02D4DC }, + { "Europe/Istanbul" , 0x02DA13 }, + { "Europe/Jersey" , 0x02DE00 }, + { "Europe/Kaliningrad" , 0x02E337 }, + { "Europe/Kiev" , 0x02E59D }, + { "Europe/Lisbon" , 0x02E8B4 }, + { "Europe/Ljubljana" , 0x02EDB8 }, + { "Europe/London" , 0x02F081 }, + { "Europe/Luxembourg" , 0x02F5B8 }, + { "Europe/Madrid" , 0x02FA0E }, + { "Europe/Malta" , 0x02FDD4 }, + { "Europe/Mariehamn" , 0x03018D }, + { "Europe/Minsk" , 0x030443 }, + { "Europe/Monaco" , 0x030651 }, + { "Europe/Moscow" , 0x030A8C }, + { "Europe/Nicosia" , 0x030CDD }, + { "Europe/Oslo" , 0x030FC5 }, + { "Europe/Paris" , 0x0312F7 }, + { "Europe/Podgorica" , 0x03173D }, + { "Europe/Prague" , 0x031A06 }, + { "Europe/Riga" , 0x031D38 }, + { "Europe/Rome" , 0x03207D }, + { "Europe/Samara" , 0x032440 }, + { "Europe/San_Marino" , 0x032673 }, + { "Europe/Sarajevo" , 0x032A36 }, + { "Europe/Simferopol" , 0x032CFF }, + { "Europe/Skopje" , 0x03302A }, + { "Europe/Sofia" , 0x0332F3 }, + { "Europe/Stockholm" , 0x0335FB }, + { "Europe/Tallinn" , 0x0338AA }, + { "Europe/Tirane" , 0x033BE4 }, + { "Europe/Tiraspol" , 0x033EEA }, + { "Europe/Uzhgorod" , 0x034278 }, + { "Europe/Vaduz" , 0x03458F }, + { "Europe/Vatican" , 0x034822 }, + { "Europe/Vienna" , 0x034BE5 }, + { "Europe/Vilnius" , 0x034F12 }, + { "Europe/Volgograd" , 0x035251 }, + { "Europe/Warsaw" , 0x035451 }, + { "Europe/Zagreb" , 0x035832 }, + { "Europe/Zaporozhye" , 0x035AFB }, + { "Europe/Zurich" , 0x035E3C }, + { "Factory" , 0x0360EB }, + { "GB" , 0x03615C }, + { "GB-Eire" , 0x036693 }, + { "GMT" , 0x036BCA }, + { "GMT+0" , 0x036C96 }, + { "GMT-0" , 0x036C52 }, + { "GMT0" , 0x036C0E }, + { "Greenwich" , 0x036CDA }, + { "Hongkong" , 0x036D1E }, + { "HST" , 0x036EE0 }, + { "Iceland" , 0x036F24 }, + { "Indian/Antananarivo" , 0x0370DD }, + { "Indian/Chagos" , 0x037151 }, + { "Indian/Christmas" , 0x0371B3 }, + { "Indian/Cocos" , 0x0371F7 }, + { "Indian/Comoro" , 0x03723B }, + { "Indian/Kerguelen" , 0x037290 }, + { "Indian/Mahe" , 0x0372E5 }, + { "Indian/Maldives" , 0x03733A }, + { "Indian/Mauritius" , 0x03738F }, + { "Indian/Mayotte" , 0x037405 }, + { "Indian/Reunion" , 0x03745A }, + { "Iran" , 0x0374AF }, + { "Israel" , 0x03771D }, + { "Jamaica" , 0x037A4C }, + { "Japan" , 0x037B11 }, + { "Kwajalein" , 0x037B9A }, + { "Libya" , 0x037BFD }, + { "MET" , 0x037CF7 }, + { "Mexico/BajaNorte" , 0x038000 }, + { "Mexico/BajaSur" , 0x038369 }, + { "Mexico/General" , 0x0385AE }, + { "MST" , 0x03880C }, + { "MST7MDT" , 0x038850 }, + { "Navajo" , 0x038BA1 }, + { "NZ" , 0x038F1A }, + { "NZ-CHAT" , 0x039298 }, + { "Pacific/Apia" , 0x039580 }, + { "Pacific/Auckland" , 0x03961D }, + { "Pacific/Chatham" , 0x0399A9 }, + { "Pacific/Chuuk" , 0x039CA0 }, + { "Pacific/Easter" , 0x039CF9 }, + { "Pacific/Efate" , 0x03A057 }, + { "Pacific/Enderbury" , 0x03A11D }, + { "Pacific/Fakaofo" , 0x03A18B }, + { "Pacific/Fiji" , 0x03A1DC }, + { "Pacific/Funafuti" , 0x03A36F }, + { "Pacific/Galapagos" , 0x03A3B3 }, + { "Pacific/Gambier" , 0x03A42B }, + { "Pacific/Guadalcanal" , 0x03A490 }, + { "Pacific/Guam" , 0x03A4E5 }, + { "Pacific/Honolulu" , 0x03A53B }, + { "Pacific/Johnston" , 0x03A5B2 }, + { "Pacific/Kiritimati" , 0x03A604 }, + { "Pacific/Kosrae" , 0x03A66F }, + { "Pacific/Kwajalein" , 0x03A6CC }, + { "Pacific/Majuro" , 0x03A738 }, + { "Pacific/Marquesas" , 0x03A797 }, + { "Pacific/Midway" , 0x03A7FE }, + { "Pacific/Nauru" , 0x03A888 }, + { "Pacific/Niue" , 0x03A900 }, + { "Pacific/Norfolk" , 0x03A95E }, + { "Pacific/Noumea" , 0x03A9B3 }, + { "Pacific/Pago_Pago" , 0x03AA43 }, + { "Pacific/Palau" , 0x03AACC }, + { "Pacific/Pitcairn" , 0x03AB10 }, + { "Pacific/Pohnpei" , 0x03AB65 }, + { "Pacific/Ponape" , 0x03ABBA }, + { "Pacific/Port_Moresby" , 0x03ABFF }, + { "Pacific/Rarotonga" , 0x03AC43 }, + { "Pacific/Saipan" , 0x03AD1F }, + { "Pacific/Samoa" , 0x03AD82 }, + { "Pacific/Tahiti" , 0x03AE0B }, + { "Pacific/Tarawa" , 0x03AE70 }, + { "Pacific/Tongatapu" , 0x03AEC4 }, + { "Pacific/Truk" , 0x03AF50 }, + { "Pacific/Wake" , 0x03AF95 }, + { "Pacific/Wallis" , 0x03AFE5 }, + { "Pacific/Yap" , 0x03B029 }, + { "Poland" , 0x03B06E }, + { "Portugal" , 0x03B44F }, + { "PRC" , 0x03B94B }, + { "PST8PDT" , 0x03B9FC }, + { "ROC" , 0x03BD4D }, + { "ROK" , 0x03BE65 }, + { "Singapore" , 0x03BF09 }, + { "Turkey" , 0x03BFC0 }, + { "UCT" , 0x03C3AD }, + { "Universal" , 0x03C3F1 }, + { "US/Alaska" , 0x03C435 }, + { "US/Aleutian" , 0x03C79E }, + { "US/Arizona" , 0x03CB04 }, + { "US/Central" , 0x03CB92 }, + { "US/East-Indiana" , 0x03D59C }, + { "US/Eastern" , 0x03D09D }, + { "US/Hawaii" , 0x03D806 }, + { "US/Indiana-Starke" , 0x03D877 }, + { "US/Michigan" , 0x03DBE8 }, + { "US/Mountain" , 0x03DF1F }, + { "US/Pacific" , 0x03E298 }, + { "US/Pacific-New" , 0x03E69D }, + { "US/Samoa" , 0x03EAA2 }, + { "UTC" , 0x03EB2B }, + { "W-SU" , 0x03EE22 }, + { "WET" , 0x03EB6F }, + { "Zulu" , 0x03F05C }, }; /* This is a generated file, do not modify */ -const unsigned char timelib_timezone_db_data_builtin[257943] = { +const unsigned char timelib_timezone_db_data_builtin[258208] = { /* Africa/Abidjan */ @@ -755,36 +755,36 @@ const unsigned char timelib_timezone_db_data_builtin[257943] = { /* Africa/Casablanca */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0x51, 0xF9, 0x9C, +0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0x51, 0xF9, 0x9C, 0xC6, 0xFF, 0x14, 0x80, 0xC7, 0x58, 0xAC, 0x70, 0xC7, 0xD9, 0xED, 0x80, 0xD2, 0xA1, 0x32, 0xF0, 0xDB, 0x35, 0xA4, 0x00, 0xDB, 0xEE, 0x27, 0xF0, 0xFB, 0x25, 0x72, 0x40, 0xFB, 0xC2, 0xEF, 0x70, 0x08, 0x6B, 0x84, 0x80, 0x08, 0xC6, 0x6D, 0xF0, 0x0B, 0xE8, 0x0C, 0x00, 0x0C, 0x61, 0x47, 0xF0, 0x0D, 0xC9, 0x3F, 0x80, 0x0E, 0x8E, 0xF2, 0x70, 0x0F, 0xD3, 0x51, 0x80, 0x10, 0x27, 0xA3, 0x70, 0x1A, 0xB7, 0xA6, 0x00, 0x1E, 0x18, 0x6F, 0xF0, 0x48, 0x41, 0xE6, 0x80, 0x48, 0xBB, 0x22, 0x70, 0x4A, 0x23, 0x1A, 0x00, 0x4A, 0x8D, 0xD5, 0x70, 0x4B, 0xDC, 0xC0, 0x80, 0x4C, 0x5D, 0xE5, 0x70, -0x4D, 0x97, 0xB8, 0x80, 0x4E, 0x34, 0x8C, 0xF0, 0x4F, 0x9C, 0xA0, 0xA0, 0x50, 0x67, 0xA7, 0xA0, -0x51, 0x7C, 0x82, 0xA0, 0x52, 0x47, 0x89, 0xA0, 0x53, 0x5C, 0x64, 0xA0, 0x54, 0x27, 0x6B, 0xA0, -0x55, 0x3C, 0x46, 0xA0, 0x56, 0x07, 0x4D, 0xA0, 0x57, 0x1C, 0x28, 0xA0, 0x57, 0xE7, 0x2F, 0xA0, -0x59, 0x05, 0x45, 0x20, 0x59, 0xC7, 0x11, 0xA0, 0x5A, 0xE5, 0x27, 0x20, 0x5B, 0xB0, 0x2E, 0x20, -0x5C, 0xC5, 0x09, 0x20, 0x5D, 0x90, 0x10, 0x20, 0x5E, 0xA4, 0xEB, 0x20, 0x5F, 0x6F, 0xF2, 0x20, -0x60, 0x84, 0xCD, 0x20, 0x61, 0x4F, 0xD4, 0x20, 0x62, 0x64, 0xAF, 0x20, 0x63, 0x2F, 0xB6, 0x20, -0x64, 0x4D, 0xCB, 0xA0, 0x65, 0x0F, 0x98, 0x20, 0x66, 0x2D, 0xAD, 0xA0, 0x66, 0xF8, 0xB4, 0xA0, -0x68, 0x0D, 0x8F, 0xA0, 0x68, 0xD8, 0x96, 0xA0, 0x69, 0xED, 0x71, 0xA0, 0x6A, 0xB8, 0x78, 0xA0, -0x6B, 0xCD, 0x53, 0xA0, 0x6C, 0x98, 0x5A, 0xA0, 0x6D, 0xB6, 0x70, 0x20, 0x6E, 0x78, 0x3C, 0xA0, -0x6F, 0x96, 0x52, 0x20, 0x70, 0x61, 0x59, 0x20, 0x71, 0x76, 0x34, 0x20, 0x72, 0x41, 0x3B, 0x20, -0x73, 0x56, 0x16, 0x20, 0x74, 0x21, 0x1D, 0x20, 0x75, 0x35, 0xF8, 0x20, 0x76, 0x00, 0xFF, 0x20, -0x77, 0x15, 0xDA, 0x20, 0x77, 0xE0, 0xE1, 0x20, 0x78, 0xFE, 0xF6, 0xA0, 0x79, 0xC0, 0xC3, 0x20, -0x7A, 0xDE, 0xD8, 0xA0, 0x7B, 0xA9, 0xDF, 0xA0, 0x7C, 0xBE, 0xBA, 0xA0, 0x7D, 0x89, 0xC1, 0xA0, -0x7E, 0x9E, 0x9C, 0xA0, 0x7F, 0x69, 0xA3, 0xA0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x4D, 0x97, 0xB8, 0x80, 0x4E, 0x34, 0x8C, 0xF0, 0x4F, 0x9C, 0xA0, 0xA0, 0x50, 0x08, 0xBB, 0xA0, +0x50, 0x31, 0x9A, 0x20, 0x50, 0x67, 0xA7, 0xA0, 0x51, 0x7C, 0x82, 0xA0, 0x52, 0x47, 0x89, 0xA0, +0x53, 0x5C, 0x64, 0xA0, 0x54, 0x27, 0x6B, 0xA0, 0x55, 0x3C, 0x46, 0xA0, 0x56, 0x07, 0x4D, 0xA0, +0x57, 0x1C, 0x28, 0xA0, 0x57, 0xE7, 0x2F, 0xA0, 0x59, 0x05, 0x45, 0x20, 0x59, 0xC7, 0x11, 0xA0, +0x5A, 0xE5, 0x27, 0x20, 0x5B, 0xB0, 0x2E, 0x20, 0x5C, 0xC5, 0x09, 0x20, 0x5D, 0x90, 0x10, 0x20, +0x5E, 0xA4, 0xEB, 0x20, 0x5F, 0x6F, 0xF2, 0x20, 0x60, 0x84, 0xCD, 0x20, 0x61, 0x4F, 0xD4, 0x20, +0x62, 0x64, 0xAF, 0x20, 0x63, 0x2F, 0xB6, 0x20, 0x64, 0x4D, 0xCB, 0xA0, 0x65, 0x0F, 0x98, 0x20, +0x66, 0x2D, 0xAD, 0xA0, 0x66, 0xF8, 0xB4, 0xA0, 0x68, 0x0D, 0x8F, 0xA0, 0x68, 0xD8, 0x96, 0xA0, +0x69, 0xED, 0x71, 0xA0, 0x6A, 0xB8, 0x78, 0xA0, 0x6B, 0xCD, 0x53, 0xA0, 0x6C, 0x98, 0x5A, 0xA0, +0x6D, 0xB6, 0x70, 0x20, 0x6E, 0x78, 0x3C, 0xA0, 0x6F, 0x96, 0x52, 0x20, 0x70, 0x61, 0x59, 0x20, +0x71, 0x76, 0x34, 0x20, 0x72, 0x41, 0x3B, 0x20, 0x73, 0x56, 0x16, 0x20, 0x74, 0x21, 0x1D, 0x20, +0x75, 0x35, 0xF8, 0x20, 0x76, 0x00, 0xFF, 0x20, 0x77, 0x15, 0xDA, 0x20, 0x77, 0xE0, 0xE1, 0x20, +0x78, 0xFE, 0xF6, 0xA0, 0x79, 0xC0, 0xC3, 0x20, 0x7A, 0xDE, 0xD8, 0xA0, 0x7B, 0xA9, 0xDF, 0xA0, +0x7C, 0xBE, 0xBA, 0xA0, 0x7D, 0x89, 0xC1, 0xA0, 0x7E, 0x9E, 0x9C, 0xA0, 0x7F, 0x69, 0xA3, 0xA0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x03, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xF8, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x0E, -0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0D, 0x4C, -0x4D, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBC, 0xAC, 0xC8, 0x01, 0x07, 0x16, 0x42, -0x00, 0x00, 0x00, 0x00, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0xFF, 0xFF, 0xF8, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, +0x00, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x53, +0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0xBC, 0xAC, 0xC8, 0x01, 0x07, 0x16, 0x42, 0x00, 0x00, 0x00, 0x00, /* Africa/Ceuta */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -16768,22 +16768,38 @@ const unsigned char timelib_timezone_db_data_builtin[257943] = { /* Pacific/Fakaofo */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x4E, 0xFD, 0x8B, 0xA0, -0x01, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xE0, 0x00, 0x00, 0x54, 0x4B, 0x54, +0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x4E, 0xFD, 0x99, 0xB0, +0x01, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x00, 0x00, 0x54, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7B, 0x09, 0x65, 0x00, 0x0D, 0x60, 0x7A, 0x00, 0x00, 0x00, 0x00, /* Pacific/Fiji */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x46, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x9A, 0x13, 0xB2, 0x3C, +0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x9A, 0x13, 0xB2, 0x3C, 0x36, 0x3B, 0x17, 0xE0, 0x36, 0xD7, 0xFA, 0x60, 0x38, 0x24, 0x34, 0x60, 0x38, 0xB7, 0xDC, 0x60, 0x4B, 0x11, 0x2C, 0xE0, 0x4B, 0xAE, 0x0F, 0x60, 0x4C, 0xC2, 0xEA, 0x60, 0x4D, 0x72, 0x41, 0xE0, -0x4E, 0xA2, 0xCC, 0x60, 0x4F, 0x1A, 0xC4, 0xE0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x00, 0x00, 0xA7, 0x44, 0x00, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x04, 0x00, -0x00, 0xA8, 0xC0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x46, 0x4A, 0x53, 0x54, 0x00, 0x46, 0x4A, -0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6D, 0xA8, 0xEA, 0x02, 0x22, 0xE6, 0x82, -0x00, 0x00, 0x00, 0x00, +0x4E, 0xA2, 0xCC, 0x60, 0x4F, 0x1A, 0xC4, 0xE0, 0x50, 0x82, 0xAE, 0x60, 0x50, 0xFA, 0xA6, 0xE0, +0x52, 0x62, 0x90, 0x60, 0x52, 0xDA, 0x88, 0xE0, 0x54, 0x42, 0x72, 0x60, 0x54, 0xBA, 0x6A, 0xE0, +0x56, 0x22, 0x54, 0x60, 0x56, 0xA3, 0x87, 0x60, 0x58, 0x0B, 0x70, 0xE0, 0x58, 0x83, 0x69, 0x60, +0x59, 0xEB, 0x52, 0xE0, 0x5A, 0x63, 0x4B, 0x60, 0x5B, 0xCB, 0x34, 0xE0, 0x5C, 0x43, 0x2D, 0x60, +0x5D, 0xAB, 0x16, 0xE0, 0x5E, 0x23, 0x0F, 0x60, 0x5F, 0x8A, 0xF8, 0xE0, 0x60, 0x0C, 0x2B, 0xE0, +0x61, 0x74, 0x15, 0x60, 0x61, 0xEC, 0x0D, 0xE0, 0x63, 0x53, 0xF7, 0x60, 0x63, 0xCB, 0xEF, 0xE0, +0x65, 0x33, 0xD9, 0x60, 0x65, 0xAB, 0xD1, 0xE0, 0x67, 0x13, 0xBB, 0x60, 0x67, 0x8B, 0xB3, 0xE0, +0x68, 0xF3, 0x9D, 0x60, 0x69, 0x6B, 0x95, 0xE0, 0x6A, 0xD3, 0x7F, 0x60, 0x6B, 0x54, 0xB2, 0x60, +0x6C, 0xBC, 0x9B, 0xE0, 0x6D, 0x34, 0x94, 0x60, 0x6E, 0x9C, 0x7D, 0xE0, 0x6F, 0x14, 0x76, 0x60, +0x70, 0x7C, 0x5F, 0xE0, 0x70, 0xF4, 0x58, 0x60, 0x72, 0x5C, 0x41, 0xE0, 0x72, 0xD4, 0x3A, 0x60, +0x74, 0x3C, 0x23, 0xE0, 0x74, 0xB4, 0x1C, 0x60, 0x76, 0x25, 0x40, 0x60, 0x76, 0x9D, 0x38, 0xE0, +0x78, 0x05, 0x22, 0x60, 0x78, 0x7D, 0x1A, 0xE0, 0x79, 0xE5, 0x04, 0x60, 0x7A, 0x5C, 0xFC, 0xE0, +0x7B, 0xC4, 0xE6, 0x60, 0x7C, 0x3C, 0xDE, 0xE0, 0x7D, 0xA4, 0xC8, 0x60, 0x7E, 0x1C, 0xC0, 0xE0, +0x7F, 0x84, 0xAA, 0x60, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x00, 0x00, 0xA7, 0x44, 0x00, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x04, 0x00, 0x00, +0xA8, 0xC0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x46, 0x4A, 0x53, 0x54, 0x00, 0x46, 0x4A, 0x54, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6D, 0xA8, 0xEA, 0x02, 0x22, 0xE6, 0x82, 0x00, +0x00, 0x00, 0x00, /* Pacific/Funafuti */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x54, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -18175,4 +18191,4 @@ const unsigned char timelib_timezone_db_data_builtin[257943] = { 0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, }; -const timelib_tzdb timezonedb_builtin = { "2012.3", 576, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; +const timelib_tzdb timezonedb_builtin = { "2012.6", 576, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; diff --git a/ext/date/tests/bug62561.phpt b/ext/date/tests/bug62561.phpt new file mode 100644 index 0000000000..0ed32c15a1 --- /dev/null +++ b/ext/date/tests/bug62561.phpt @@ -0,0 +1,16 @@ +--TEST-- +Bug #62561 Unixtimestamp may take on local times DST flag (this test will only be valid during EDT) +--FILE-- +<?php +$tz = new DateTimeZone('America/New_York'); +$ts = new DateTime('@1341115200', $tz); +$int = new DateInterval('P1D'); +$dayFromTs = new DateTime('@1341115200', new DateTimeZone('America/New_York')); +$dayFromTs->add($int); + +echo 'ts: '.$ts->format('Y-m-d H:i:s')."\n"; +echo 'day from ts: '.$dayFromTs->format('Y-m-d H:i:s')."\n"; +?> +--EXPECT-- +ts: 2012-07-01 04:00:00 +day from ts: 2012-07-02 04:00:00 diff --git a/ext/date/tests/bug62896.phpt b/ext/date/tests/bug62896.phpt new file mode 100644 index 0000000000..7584546b5a --- /dev/null +++ b/ext/date/tests/bug62896.phpt @@ -0,0 +1,40 @@ +--TEST-- +Bug #62896 Unixtimestamp may take on local times DST flag (this test will only be valid during CEST) +--FILE-- +<?php + $tz = new DateTimeZone('Europe/Berlin'); + + echo "FROM TIMESTAMP, NO TZ:\n"; + + $date = new DateTime('@'.strtotime('2012-08-22 00:00:00 CEST')); + echo $date->format('Y-m-d H:i:s T').' (offset '.$date->getOffset().")\n"; + + $date->modify('+0 days'); + echo $date->format('Y-m-d H:i:s T').' (offset '.$date->getOffset().")\n"; + + echo "FROM TIMESTAMP, WITH TZ:\n"; + + $date = new DateTime('@'.strtotime('2012-08-22 00:00:00 CEST')); + $date->setTimezone($tz); + echo $date->format('Y-m-d H:i:s T').' (offset '.$date->getOffset().")\n"; + + $date->modify('+0 days'); + echo $date->format('Y-m-d H:i:s T').' (offset '.$date->getOffset().")\n"; + + echo "FROM STRING:\n"; + + $date = new DateTime('2012-08-22 00:00:00 CEST', $tz); + echo $date->format('Y-m-d H:i:s T').' (offset '.$date->getOffset().")\n"; + + $date->modify('+0 days'); + echo $date->format('Y-m-d H:i:s T').' (offset '.$date->getOffset().")\n"; +--EXPECT-- +FROM TIMESTAMP, NO TZ: +2012-08-21 22:00:00 GMT+0000 (offset 0) +2012-08-21 22:00:00 GMT+0000 (offset 0) +FROM TIMESTAMP, WITH TZ: +2012-08-22 00:00:00 CEST (offset 7200) +2012-08-22 00:00:00 CEST (offset 7200) +FROM STRING: +2012-08-22 00:00:00 CEST (offset 7200) +2012-08-22 00:00:00 CEST (offset 7200) diff --git a/ext/gd/gd.c b/ext/gd/gd.c index 8fa0adec92..cfcc3e876c 100644 --- a/ext/gd/gd.c +++ b/ext/gd/gd.c @@ -1328,6 +1328,11 @@ PHP_MINFO_FUNCTION(gd) #endif #if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED) php_info_print_table_row(2, "XPM Support", "enabled"); + { + char tmp[12]; + snprintf(tmp, sizeof(tmp), "%d", XpmLibraryVersion()); + php_info_print_table_row(2, "libXpm Version", tmp); + } #endif #ifdef HAVE_GD_XBM php_info_print_table_row(2, "XBM Support", "enabled"); diff --git a/ext/spl/tests/RecursiveDirectoryIterator_getSubPath_basic.phpt b/ext/spl/tests/RecursiveDirectoryIterator_getSubPath_basic.phpt index 5107cd32b6..f0b2b0182c 100644 --- a/ext/spl/tests/RecursiveDirectoryIterator_getSubPath_basic.phpt +++ b/ext/spl/tests/RecursiveDirectoryIterator_getSubPath_basic.phpt @@ -5,9 +5,9 @@ Pawel Krynicki <pawel [dot] krynicki [at] xsolve [dot] pl> #testfest AmsterdamPHP 2012-06-23 --FILE-- <?php -$depth0 = md5('recursiveDirectoryIterator::getSubPath'); -$depth1 = md5('depth1'); -$depth2 = md5('depth2'); +$depth0 = "depth0"; +$depth1 = 'depth1'; +$depth2 = 'depth2'; $targetDir = __DIR__ . DIRECTORY_SEPARATOR . $depth0 . DIRECTORY_SEPARATOR . $depth1 . DIRECTORY_SEPARATOR . $depth2; mkdir($targetDir, 0777, true); touch($targetDir . DIRECTORY_SEPARATOR . 'getSubPath_test.tmp'); @@ -24,29 +24,27 @@ foreach ($list as $item) { echo $item . "\n"; } ?> -==DONE== --CLEAN-- <?php function rrmdir($dir) { - foreach(glob($dir . '/*') as $file) { - if(is_dir($file)) { + foreach(glob($dir . '/*') as $file) { + if(is_dir($file)) { rrmdir($file); - } else { + } else { unlink($file); - } - } + } + } - rmdir($dir); - } + rmdir($dir); +} - $targetDir = __DIR__.DIRECTORY_SEPARATOR.md5('recursiveDirectoryIterator::getSubPath'); - rrmdir($targetDir); +$targetDir = __DIR__.DIRECTORY_SEPARATOR . "depth0"; +rrmdir($targetDir); ?> ---EXPECT-- -a0c967a6c2c34786e4802f59af9356f5 -a0c967a6c2c34786e4802f59af9356f5 -a0c967a6c2c34786e4802f59af9356f5/9925aabb545352472e4d77942627b507 -a0c967a6c2c34786e4802f59af9356f5/9925aabb545352472e4d77942627b507 -a0c967a6c2c34786e4802f59af9356f5/9925aabb545352472e4d77942627b507 -==DONE== +--EXPECTF-- +depth1 +depth1 +depth1%cdepth2 +depth1%cdepth2 +depth1%cdepth2 diff --git a/ext/spl/tests/RecursiveDirectoryIterator_getSubPathname_basic.phpt b/ext/spl/tests/RecursiveDirectoryIterator_getSubPathname_basic.phpt index 4e17ea9d42..7b12672e14 100644 --- a/ext/spl/tests/RecursiveDirectoryIterator_getSubPathname_basic.phpt +++ b/ext/spl/tests/RecursiveDirectoryIterator_getSubPathname_basic.phpt @@ -5,9 +5,9 @@ Pawel Krynicki <pawel [dot] krynicki [at] xsolve [dot] pl> #testfest AmsterdamPHP 2012-06-23 --FILE-- <?php -$depth0 = md5('recursiveDirectoryIterator::getSubPathname'); -$depth1 = md5('depth1'); -$depth2 = md5('depth2'); +$depth0 = "depth0"; +$depth1 = "depth1"; +$depth2 = "depth2"; $targetDir = __DIR__ . DIRECTORY_SEPARATOR . $depth0 . DIRECTORY_SEPARATOR . $depth1 . DIRECTORY_SEPARATOR . $depth2; mkdir($targetDir, 0777, true); touch($targetDir . DIRECTORY_SEPARATOR . 'getSubPathname_test_2.tmp'); @@ -17,6 +17,7 @@ $iterator = new RecursiveDirectoryIterator(__DIR__ . DIRECTORY_SEPARATOR . $dept $it = new RecursiveIteratorIterator($iterator); $list = []; +$it->rewind(); //see https://bugs.php.net/bug.php?id=62914 while($it->valid()) { $list[] = $it->getSubPathname(); $it->next(); @@ -26,7 +27,6 @@ foreach ($list as $item) { echo $item . "\n"; } ?> -==DONE== --CLEAN-- <?php function rrmdir($dir) { @@ -41,18 +41,16 @@ function rrmdir($dir) { rmdir($dir); } -$targetDir = __DIR__ . DIRECTORY_SEPARATOR . md5('recursiveDirectoryIterator::getSubPathname'); +$targetDir = __DIR__ . DIRECTORY_SEPARATOR . "depth0"; rrmdir($targetDir); ?> ---EXPECT-- -. +--EXPECTF-- . .. -a0c967a6c2c34786e4802f59af9356f5/. -a0c967a6c2c34786e4802f59af9356f5/.. -a0c967a6c2c34786e4802f59af9356f5/9925aabb545352472e4d77942627b507/. -a0c967a6c2c34786e4802f59af9356f5/9925aabb545352472e4d77942627b507/.. -a0c967a6c2c34786e4802f59af9356f5/9925aabb545352472e4d77942627b507/getSubPathname_test_2.tmp -a0c967a6c2c34786e4802f59af9356f5/getSubPathname_test_3.tmp +depth1%c. +depth1%c.. +depth1%cdepth2%c. +depth1%cdepth2%c.. +depth1%cdepth2%cgetSubPathname_test_2.tmp +depth1%cgetSubPathname_test_3.tmp getSubPathname_test_1.tmp -==DONE== diff --git a/ext/standard/tests/network/gethostbyname_basic001.phpt b/ext/standard/tests/network/gethostbyname_basic001.phpt index e917b59920..9171e226aa 100644 --- a/ext/standard/tests/network/gethostbyname_basic001.phpt +++ b/ext/standard/tests/network/gethostbyname_basic001.phpt @@ -5,6 +5,7 @@ gethostbyname() function - basic type return test --SKIPIF-- <?php if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); +if (getenv("SKIP_ONLINE_TESTS")) die("skip test requiring internet connection"); ?> --FILE-- <?php diff --git a/ext/standard/tests/network/gethostbyname_basic002.phpt b/ext/standard/tests/network/gethostbyname_basic002.phpt deleted file mode 100644 index 983faa929e..0000000000 --- a/ext/standard/tests/network/gethostbyname_basic002.phpt +++ /dev/null @@ -1,15 +0,0 @@ ---TEST-- -gethostbyname() function - basic invalid parameter test ---CREDITS-- -"Sylvain R." <sracine@phpquebec.org> ---SKIPIF-- -<?php -if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); -?> ---FILE-- -<?php - $ip = gethostbyname("www.php.net"); - var_dump((bool) ip2long($ip)); -?> ---EXPECT-- -bool(true) diff --git a/ext/standard/tests/network/gethostbyname_error004.phpt b/ext/standard/tests/network/gethostbyname_error004.phpt index 7aac172920..274301a236 100644 --- a/ext/standard/tests/network/gethostbyname_error004.phpt +++ b/ext/standard/tests/network/gethostbyname_error004.phpt @@ -5,6 +5,7 @@ gethostbyname() function - basic return valid ip address test --SKIPIF-- <?php if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); +if (getenv("SKIP_ONLINE_TESTS")) die("skip test requiring internet connection"); ?> --FILE-- <?php diff --git a/ext/standard/tests/network/getmxrr.phpt b/ext/standard/tests/network/getmxrr.phpt index 29cea1d71e..c4a15c52ce 100644 --- a/ext/standard/tests/network/getmxrr.phpt +++ b/ext/standard/tests/network/getmxrr.phpt @@ -3,6 +3,7 @@ getmxrr() test --SKIPIF-- <?php if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); +if (getenv("SKIP_ONLINE_TESTS")) die("skip test requiring internet connection"); if (substr(PHP_OS, 0, 3) == 'WIN') { die('skip: no Windows support'); } diff --git a/ext/standard/tests/serialize/bug35895.phpt b/ext/standard/tests/serialize/bug35895.phpt new file mode 100644 index 0000000000..22fce0d1f2 --- /dev/null +++ b/ext/standard/tests/serialize/bug35895.phpt @@ -0,0 +1,24 @@ +--TEST-- +Bug #35895 (__sleep and private property) +--FILE-- +<?php +class Parents { + private $parents; + public function __sleep() { + return array("parents"); + } +} + +class Child extends Parents { + private $child; + public function __sleep() { + return array_merge(array("child"), parent::__sleep()); + } +} + +$obj = new Child(); +serialize($obj); + +?> +--EXPECTF-- +Notice: serialize(): "parents" returned as member variable from __sleep() but does not exist in %sbug35895.php on line %d diff --git a/ext/standard/tests/url/bug63162.phpt b/ext/standard/tests/url/bug63162.phpt new file mode 100644 index 0000000000..ea5205efd6 --- /dev/null +++ b/ext/standard/tests/url/bug63162.phpt @@ -0,0 +1,38 @@ +--TEST-- +Test parse_url() for bug #63162 +--DESCRIPTION-- +This test covers tests the inputs: +[0]=> http://user:pass@host +[1]=> //user:pass@host +[2]=> //user@host +--FILE-- +<?php +var_dump(parse_url('http://user:pass@host')); +var_dump(parse_url('//user:pass@host')); +var_dump(parse_url('//user@host')); +?> +--EXPECT-- +array(4) { + ["scheme"]=> + string(4) "http" + ["host"]=> + string(4) "host" + ["user"]=> + string(4) "user" + ["pass"]=> + string(4) "pass" +} +array(3) { + ["host"]=> + string(4) "host" + ["user"]=> + string(4) "user" + ["pass"]=> + string(4) "pass" +} +array(2) { + ["host"]=> + string(4) "host" + ["user"]=> + string(4) "user" +} diff --git a/ext/standard/url.c b/ext/standard/url.c index 44a568032b..c159322837 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -201,6 +201,8 @@ PHPAPI php_url *php_url_parse_ex(char const *str, int length) STR_FREE(ret->scheme); efree(ret); return NULL; + } else if (*s == '/' && *(s+1) == '/') { /* relative-scheme URL */ + s += 2; } else { goto just_path; } diff --git a/ext/standard/var.c b/ext/standard/var.c index 494fb583c7..a4fa262e76 100644 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@ -639,6 +639,7 @@ static void php_var_serialize_class(smart_str *buf, zval *struc, zval *retval_pt HashPosition pos; int i; zval nval, *nvalp; + HashTable *propers; ZVAL_NULL(&nval); nvalp = &nval; @@ -664,7 +665,8 @@ static void php_var_serialize_class(smart_str *buf, zval *struc, zval *retval_pt smart_str_appendl(buf,"N;", 2); continue; } - if (zend_hash_find(Z_OBJPROP_P(struc), Z_STRVAL_PP(name), Z_STRLEN_PP(name) + 1, (void *) &d) == SUCCESS) { + propers = Z_OBJPROP_P(struc); + if (zend_hash_find(propers, Z_STRVAL_PP(name), Z_STRLEN_PP(name) + 1, (void *) &d) == SUCCESS) { php_var_serialize_string(buf, Z_STRVAL_PP(name), Z_STRLEN_PP(name)); php_var_serialize_intern(buf, *d, var_hash TSRMLS_CC); } else { @@ -676,7 +678,7 @@ static void php_var_serialize_class(smart_str *buf, zval *struc, zval *retval_pt do { zend_mangle_property_name(&priv_name, &prop_name_length, ce->name, ce->name_length, Z_STRVAL_PP(name), Z_STRLEN_PP(name), ce->type & ZEND_INTERNAL_CLASS); - if (zend_hash_find(Z_OBJPROP_P(struc), priv_name, prop_name_length + 1, (void *) &d) == SUCCESS) { + if (zend_hash_find(propers, priv_name, prop_name_length + 1, (void *) &d) == SUCCESS) { php_var_serialize_string(buf, priv_name, prop_name_length); pefree(priv_name, ce->type & ZEND_INTERNAL_CLASS); php_var_serialize_intern(buf, *d, var_hash TSRMLS_CC); @@ -684,7 +686,7 @@ static void php_var_serialize_class(smart_str *buf, zval *struc, zval *retval_pt } pefree(priv_name, ce->type & ZEND_INTERNAL_CLASS); zend_mangle_property_name(&prot_name, &prop_name_length, "*", 1, Z_STRVAL_PP(name), Z_STRLEN_PP(name), ce->type & ZEND_INTERNAL_CLASS); - if (zend_hash_find(Z_OBJPROP_P(struc), prot_name, prop_name_length + 1, (void *) &d) == SUCCESS) { + if (zend_hash_find(propers, prot_name, prop_name_length + 1, (void *) &d) == SUCCESS) { php_var_serialize_string(buf, prot_name, prop_name_length); pefree(prot_name, ce->type & ZEND_INTERNAL_CLASS); php_var_serialize_intern(buf, *d, var_hash TSRMLS_CC); diff --git a/main/php_version.h b/main/php_version.h index 0efdef14a5..8dfe49630f 100644 --- a/main/php_version.h +++ b/main/php_version.h @@ -2,7 +2,7 @@ /* edit configure.in to change version number */ #define PHP_MAJOR_VERSION 5 #define PHP_MINOR_VERSION 4 -#define PHP_RELEASE_VERSION 8 +#define PHP_RELEASE_VERSION 9 #define PHP_EXTRA_VERSION "-dev" -#define PHP_VERSION "5.4.8-dev" -#define PHP_VERSION_ID 50408 +#define PHP_VERSION "5.4.9-dev" +#define PHP_VERSION_ID 50409 diff --git a/run-tests.php b/run-tests.php index cfc562ebc1..a746c36965 100755 --- a/run-tests.php +++ b/run-tests.php @@ -632,6 +632,9 @@ if (isset($argc) && $argc > 1) { case 'x': $environment['SKIP_SLOW_TESTS'] = 1; break; + case '--offline': + $environment['SKIP_ONLINE_TESTS'] = 1; + break; //case 'w' case '-': // repeat check with full switch @@ -689,6 +692,8 @@ Options: -x Sets 'SKIP_SLOW_TESTS' environmental variable. + --offline Sets 'SKIP_ONLINE_TESTS' environmental variable. + --verbose -v Verbose mode. diff --git a/sapi/fpm/config.m4 b/sapi/fpm/config.m4 index ad46717acd..6191c329ba 100644 --- a/sapi/fpm/config.m4 +++ b/sapi/fpm/config.m4 @@ -587,12 +587,16 @@ if test "$PHP_FPM" != "no"; then AC_DEFINE_UNQUOTED(PHP_FPM_USER, "$php_fpm_user", [fpm user name]) AC_DEFINE_UNQUOTED(PHP_FPM_GROUP, "$php_fpm_group", [fpm group name]) + AC_DEFINE_UNQUOTED(PHP_FPM_USER, "$php_fpm_user", [fpm user name]) + AC_DEFINE_UNQUOTED(PHP_FPM_GROUP, "$php_fpm_group", [fpm group name]) + PHP_ADD_BUILD_DIR(sapi/fpm/fpm) PHP_ADD_BUILD_DIR(sapi/fpm/fpm/events) - PHP_OUTPUT(sapi/fpm/php-fpm.conf sapi/fpm/init.d.php-fpm sapi/fpm/php-fpm.8 sapi/fpm/status.html) + PHP_OUTPUT(sapi/fpm/php-fpm.conf sapi/fpm/init.d.php-fpm sapi/fpm/php-fpm.service sapi/fpm/php-fpm.8 sapi/fpm/status.html) PHP_ADD_MAKEFILE_FRAGMENT([$abs_srcdir/sapi/fpm/Makefile.frag]) SAPI_FPM_PATH=sapi/fpm/php-fpm + if test "$fpm_trace_type" && test -f "$abs_srcdir/sapi/fpm/fpm/fpm_trace_$fpm_trace_type.c"; then PHP_FPM_TRACE_FILES="fpm/fpm_trace.c fpm/fpm_trace_$fpm_trace_type.c" diff --git a/sapi/fpm/fpm/fpm.c b/sapi/fpm/fpm/fpm.c index dab415d123..b866f37f2d 100644 --- a/sapi/fpm/fpm/fpm.c +++ b/sapi/fpm/fpm/fpm.c @@ -39,10 +39,10 @@ struct fpm_globals_s fpm_globals = { .test_successful = 0, .heartbeat = 0, .run_as_root = 0, - .send_config_signal = 0, + .send_config_pipe = {0, 0}, }; -int fpm_init(int argc, char **argv, char *config, char *prefix, char *pid, int test_conf, int run_as_root) /* {{{ */ +int fpm_init(int argc, char **argv, char *config, char *prefix, char *pid, int test_conf, int run_as_root, int force_daemon) /* {{{ */ { fpm_globals.argc = argc; fpm_globals.argv = argv; @@ -55,7 +55,7 @@ int fpm_init(int argc, char **argv, char *config, char *prefix, char *pid, int t if (0 > fpm_php_init_main() || 0 > fpm_stdio_init_main() || - 0 > fpm_conf_init_main(test_conf) || + 0 > fpm_conf_init_main(test_conf, force_daemon) || 0 > fpm_unix_init_main() || 0 > fpm_scoreboard_init_main() || 0 > fpm_pctl_init_main() || diff --git a/sapi/fpm/fpm/fpm.h b/sapi/fpm/fpm/fpm.h index 7a2903d07d..65d0e0d691 100644 --- a/sapi/fpm/fpm/fpm.h +++ b/sapi/fpm/fpm/fpm.h @@ -37,7 +37,7 @@ int fpm_run(int *max_requests); -int fpm_init(int argc, char **argv, char *config, char *prefix, char *pid, int test_conf, int run_as_root); +int fpm_init(int argc, char **argv, char *config, char *prefix, char *pid, int test_conf, int run_as_root, int force_daemon); struct fpm_globals_s { pid_t parent_pid; @@ -55,7 +55,7 @@ struct fpm_globals_s { int test_successful; int heartbeat; int run_as_root; - int send_config_signal; + int send_config_pipe[2]; }; extern struct fpm_globals_s fpm_globals; diff --git a/sapi/fpm/fpm/fpm_conf.c b/sapi/fpm/fpm/fpm_conf.c index dfe6792c05..25e2cc43a1 100644 --- a/sapi/fpm/fpm/fpm_conf.c +++ b/sapi/fpm/fpm/fpm_conf.c @@ -1115,7 +1115,7 @@ int fpm_conf_write_pid() /* {{{ */ } /* }}} */ -static int fpm_conf_post_process(TSRMLS_D) /* {{{ */ +static int fpm_conf_post_process(int force_daemon TSRMLS_DC) /* {{{ */ { struct fpm_worker_pool_s *wp; @@ -1123,6 +1123,11 @@ static int fpm_conf_post_process(TSRMLS_D) /* {{{ */ fpm_evaluate_full_path(&fpm_global_config.pid_file, NULL, PHP_LOCALSTATEDIR, 0); } + if (force_daemon >= 0) { + /* forced from command line options */ + fpm_global_config.daemonize = force_daemon; + } + fpm_globals.log_level = fpm_global_config.log_level; if (fpm_global_config.process_max < 0) { @@ -1584,7 +1589,7 @@ static void fpm_conf_dump() /* {{{ */ } /* }}} */ -int fpm_conf_init_main(int test_conf) /* {{{ */ +int fpm_conf_init_main(int test_conf, int force_daemon) /* {{{ */ { int ret; TSRMLS_FETCH(); @@ -1630,7 +1635,7 @@ int fpm_conf_init_main(int test_conf) /* {{{ */ return -1; } - if (0 > fpm_conf_post_process(TSRMLS_C)) { + if (0 > fpm_conf_post_process(force_daemon TSRMLS_CC)) { zlog(ZLOG_ERROR, "failed to post process the configuration"); return -1; } diff --git a/sapi/fpm/fpm/fpm_conf.h b/sapi/fpm/fpm/fpm_conf.h index f780f03891..dc54133d43 100644 --- a/sapi/fpm/fpm/fpm_conf.h +++ b/sapi/fpm/fpm/fpm_conf.h @@ -97,7 +97,7 @@ enum { PM_STYLE_ONDEMAND = 3 }; -int fpm_conf_init_main(int test_conf); +int fpm_conf_init_main(int test_conf, int force_daemon); int fpm_worker_pool_config_free(struct fpm_worker_pool_config_s *wpc); int fpm_conf_write_pid(); int fpm_conf_unlink_pid(); diff --git a/sapi/fpm/fpm/fpm_main.c b/sapi/fpm/fpm/fpm_main.c index cdec235bdd..edd75be5ae 100644 --- a/sapi/fpm/fpm/fpm_main.c +++ b/sapi/fpm/fpm/fpm_main.c @@ -155,6 +155,8 @@ static const opt_struct OPTIONS[] = { {'p', 1, "prefix"}, {'g', 1, "pid"}, {'R', 0, "allow-to-run-as-root"}, + {'D', 0, "daemonize"}, + {'F', 0, "nodaemonize"}, {'-', 0, NULL} /* end of args */ }; @@ -912,7 +914,7 @@ static void php_cgi_usage(char *argv0) prog = "php"; } - php_printf( "Usage: %s [-n] [-e] [-h] [-i] [-m] [-v] [-t] [-p <prefix>] [-g <pid>] [-c <file>] [-d foo[=bar]] [-y <file>]\n" + php_printf( "Usage: %s [-n] [-e] [-h] [-i] [-m] [-v] [-t] [-p <prefix>] [-g <pid>] [-c <file>] [-d foo[=bar]] [-y <file>] [-D] [-F]\n" " -c <path>|<file> Look for php.ini file in this directory\n" " -n No php.ini file will be used\n" " -d foo[=bar] Define INI entry foo with value 'bar'\n" @@ -928,6 +930,9 @@ static void php_cgi_usage(char *argv0) " -y, --fpm-config <file>\n" " Specify alternative path to FastCGI process manager config file.\n" " -t, --test Test FPM configuration and exit\n" + " -D, --daemonize force to run in background, and ignore daemonize option from config file\n" + " -F, --nodaemonize\n" + " force to stay in foreground, and ignore daemonize option from config file\n" " -R, --allow-to-run-as-root\n" " Allow pool to run as root (disabled by default)\n", prog, PHP_PREFIX); @@ -1550,6 +1555,7 @@ int main(int argc, char *argv[]) char *fpm_prefix = NULL; char *fpm_pid = NULL; int test_conf = 0; + int force_daemon = -1; int php_information = 0; int php_allow_to_run_as_root = 0; @@ -1670,6 +1676,14 @@ int main(int argc, char *argv[]) php_allow_to_run_as_root = 1; break; + case 'D': /* daemonize */ + force_daemon = 1; + break; + + case 'F': /* nodaemonize */ + force_daemon = 0; + break; + default: case 'h': case '?': @@ -1797,18 +1811,22 @@ consult the installation file that came with this distribution, or visit \n\ } } - if (0 > fpm_init(argc, argv, fpm_config ? fpm_config : CGIG(fpm_config), fpm_prefix, fpm_pid, test_conf, php_allow_to_run_as_root)) { + if (0 > fpm_init(argc, argv, fpm_config ? fpm_config : CGIG(fpm_config), fpm_prefix, fpm_pid, test_conf, php_allow_to_run_as_root, force_daemon)) { - if (fpm_globals.send_config_signal) { - zlog(ZLOG_DEBUG, "Sending SIGUSR2 (error) to parent %d", getppid()); - kill(getppid(), SIGUSR2); + if (fpm_globals.send_config_pipe[1]) { + int writeval = 0; + zlog(ZLOG_DEBUG, "Sending \"0\" (error) to parent via fd=%d", fpm_globals.send_config_pipe[1]); + write(fpm_globals.send_config_pipe[1], &writeval, sizeof(writeval)); + close(fpm_globals.send_config_pipe[1]); } return FPM_EXIT_CONFIG; } - if (fpm_globals.send_config_signal) { - zlog(ZLOG_DEBUG, "Sending SIGUSR1 (OK) to parent %d", getppid()); - kill(getppid(), SIGUSR1); + if (fpm_globals.send_config_pipe[1]) { + int writeval = 1; + zlog(ZLOG_DEBUG, "Sending \"1\" (OK) to parent via fd=%d", fpm_globals.send_config_pipe[1]); + write(fpm_globals.send_config_pipe[1], &writeval, sizeof(writeval)); + close(fpm_globals.send_config_pipe[1]); } fpm_is_running = 1; diff --git a/sapi/fpm/fpm/fpm_signals.c b/sapi/fpm/fpm/fpm_signals.c index 656269f1a3..8993a860ae 100644 --- a/sapi/fpm/fpm/fpm_signals.c +++ b/sapi/fpm/fpm/fpm_signals.c @@ -249,15 +249,3 @@ int fpm_signals_get_fd() /* {{{ */ } /* }}} */ -void fpm_signals_sighandler_exit_ok(pid_t pid) /* {{{ */ -{ - exit(FPM_EXIT_OK); -} -/* }}} */ - -void fpm_signals_sighandler_exit_config(pid_t pid) /* {{{ */ -{ - exit(FPM_EXIT_CONFIG); -} -/* }}} */ - diff --git a/sapi/fpm/fpm/fpm_signals.h b/sapi/fpm/fpm/fpm_signals.h index 13484cbac2..eb80faecfd 100644 --- a/sapi/fpm/fpm/fpm_signals.h +++ b/sapi/fpm/fpm/fpm_signals.h @@ -11,9 +11,6 @@ int fpm_signals_init_main(); int fpm_signals_init_child(); int fpm_signals_get_fd(); -void fpm_signals_sighandler_exit_ok(pid_t pid); -void fpm_signals_sighandler_exit_config(pid_t pid); - extern const char *fpm_signal_names[NSIG + 1]; #endif diff --git a/sapi/fpm/fpm/fpm_status.c b/sapi/fpm/fpm/fpm_status.c index b9b9a8c0b6..2363b57f80 100644 --- a/sapi/fpm/fpm/fpm_status.c +++ b/sapi/fpm/fpm/fpm_status.c @@ -148,7 +148,7 @@ int fpm_status_handle_request(TSRMLS_D) /* {{{ */ "<tr><th>start time</th><td>%s</td></tr>\n" "<tr><th>start since</th><td>%lu</td></tr>\n" "<tr><th>accepted conn</th><td>%lu</td></tr>\n" -#if HAVE_FPM_LQ +#ifdef HAVE_FPM_LQ "<tr><th>listen queue</th><td>%u</td></tr>\n" "<tr><th>max listen queue</th><td>%u</td></tr>\n" "<tr><th>listen queue len</th><td>%d</td></tr>\n" @@ -178,7 +178,7 @@ int fpm_status_handle_request(TSRMLS_D) /* {{{ */ "<th>content length</th>" "<th>user</th>" "<th>script</th>" -#if HAVE_FPM_LQ +#ifdef HAVE_FPM_LQ "<th>last request cpu</th>" #endif "<th>last request memory</th>" @@ -197,7 +197,7 @@ int fpm_status_handle_request(TSRMLS_D) /* {{{ */ "<td>%zu</td>" "<td>%s</td>" "<td>%s</td>" -#if HAVE_FPM_LQ +#ifdef HAVE_FPM_LQ "<td>%.2f</td>" #endif "<td>%zu</td>" @@ -220,7 +220,7 @@ int fpm_status_handle_request(TSRMLS_D) /* {{{ */ "<start-time>%s</start-time>\n" "<start-since>%lu</start-since>\n" "<accepted-conn>%lu</accepted-conn>\n" -#if HAVE_FPM_LQ +#ifdef HAVE_FPM_LQ "<listen-queue>%u</listen-queue>\n" "<max-listen-queue>%u</max-listen-queue>\n" "<listen-queue-len>%d</listen-queue-len>\n" @@ -249,7 +249,7 @@ int fpm_status_handle_request(TSRMLS_D) /* {{{ */ "<content-length>%zu</content-length>" "<user>%s</user>" "<script>%s</script>" -#if HAVE_FPM_LQ +#ifdef HAVE_FPM_LQ "<last-request-cpu>%.2f</last-request-cpu>" #endif "<last-request-memory>%zu</last-request-memory>" @@ -270,7 +270,7 @@ int fpm_status_handle_request(TSRMLS_D) /* {{{ */ "\"start time\":%s," "\"start since\":%lu," "\"accepted conn\":%lu," -#if HAVE_FPM_LQ +#ifdef HAVE_FPM_LQ "\"listen queue\":%u," "\"max listen queue\":%u," "\"listen queue len\":%d," @@ -300,7 +300,7 @@ int fpm_status_handle_request(TSRMLS_D) /* {{{ */ "\"content length\":%zu," "\"user\":\"%s\"," "\"script\":\"%s\"," -#if HAVE_FPM_LQ +#ifdef HAVE_FPM_LQ "\"last request cpu\":%.2f," #endif "\"last request memory\":%zu" @@ -320,7 +320,7 @@ int fpm_status_handle_request(TSRMLS_D) /* {{{ */ "start time: %s\n" "start since: %lu\n" "accepted conn: %lu\n" -#if HAVE_FPM_LQ +#ifdef HAVE_FPM_LQ "listen queue: %u\n" "max listen queue: %u\n" "listen queue len: %d\n" @@ -362,7 +362,7 @@ int fpm_status_handle_request(TSRMLS_D) /* {{{ */ time_buffer, now_epoch - scoreboard.start_epoch, scoreboard.requests, -#if HAVE_FPM_LQ +#ifdef HAVE_FPM_LQ scoreboard.lq, scoreboard.lq_max, scoreboard.lq_len, diff --git a/sapi/fpm/fpm/fpm_unix.c b/sapi/fpm/fpm/fpm_unix.c index 5c5e37c3a4..48249e8a49 100644 --- a/sapi/fpm/fpm/fpm_unix.c +++ b/sapi/fpm/fpm/fpm_unix.c @@ -121,16 +121,16 @@ static int fpm_unix_conf_wp(struct fpm_worker_pool_s *wp) /* {{{ */ } } else { /* not root */ if (wp->config->user && *wp->config->user) { - zlog(ZLOG_WARNING, "[pool %s] 'user' directive is ignored when FPM is not running as root", wp->config->name); + zlog(ZLOG_NOTICE, "[pool %s] 'user' directive is ignored when FPM is not running as root", wp->config->name); } if (wp->config->group && *wp->config->group) { - zlog(ZLOG_WARNING, "[pool %s] 'group' directive is ignored when FPM is not running as root", wp->config->name); + zlog(ZLOG_NOTICE, "[pool %s] 'group' directive is ignored when FPM is not running as root", wp->config->name); } if (wp->config->chroot && *wp->config->chroot) { - zlog(ZLOG_WARNING, "[pool %s] 'chroot' directive is ignored when FPM is not running as root", wp->config->name); + zlog(ZLOG_NOTICE, "[pool %s] 'chroot' directive is ignored when FPM is not running as root", wp->config->name); } if (wp->config->process_priority != 64) { - zlog(ZLOG_WARNING, "[pool %s] 'process.priority' directive is ignored when FPM is not running as root", wp->config->name); + zlog(ZLOG_NOTICE, "[pool %s] 'process.priority' directive is ignored when FPM is not running as root", wp->config->name); } /* set up HOME and USER anyway */ @@ -262,36 +262,19 @@ int fpm_unix_init_main() /* {{{ */ * The parent process has then to wait for the master * process to initialize to return a consistent exit * value. For this pupose, the master process will - * send USR1 if everything went well and USR2 - * otherwise. + * send \"1\" into the pipe if everything went well + * and \"0\" otherwise. */ - struct sigaction act; - struct sigaction oldact_usr1; - struct sigaction oldact_usr2; - struct timeval tv; - /* - * set sigaction for USR1 before fork - * save old sigaction to restore it after - * fork in the child process (the master process) - */ - memset(&act, 0, sizeof(act)); - memset(&act, 0, sizeof(oldact_usr1)); - act.sa_handler = fpm_signals_sighandler_exit_ok; - sigfillset(&act.sa_mask); - sigaction(SIGUSR1, &act, &oldact_usr1); + struct timeval tv; + fd_set rfds; + int ret; - /* - * set sigaction for USR2 before fork - * save old sigaction to restore it after - * fork in the child process (the master process) - */ - memset(&act, 0, sizeof(act)); - memset(&act, 0, sizeof(oldact_usr2)); - act.sa_handler = fpm_signals_sighandler_exit_config; - sigfillset(&act.sa_mask); - sigaction(SIGUSR2, &act, &oldact_usr2); + if (pipe(fpm_globals.send_config_pipe) == -1) { + zlog(ZLOG_SYSERROR, "failed to create pipe"); + return -1; + } /* then fork */ pid_t pid = fork(); @@ -302,24 +285,54 @@ int fpm_unix_init_main() /* {{{ */ return -1; case 0 : /* children */ - /* restore USR1 and USR2 sigaction */ - sigaction(SIGUSR1, &oldact_usr1, NULL); - sigaction(SIGUSR2, &oldact_usr2, NULL); - fpm_globals.send_config_signal = 1; + close(fpm_globals.send_config_pipe[0]); /* close the read side of the pipe */ break; default : /* parent */ - fpm_cleanups_run(FPM_CLEANUP_PARENT_EXIT); + close(fpm_globals.send_config_pipe[1]); /* close the write side of the pipe */ /* * wait for 10s before exiting with error - * the child is supposed to send USR1 or USR2 to tell the parent + * the child is supposed to send 1 or 0 into the pipe to tell the parent * how it goes for it */ + FD_ZERO(&rfds); + FD_SET(fpm_globals.send_config_pipe[0], &rfds); + tv.tv_sec = 10; tv.tv_usec = 0; - zlog(ZLOG_DEBUG, "The calling process is waiting for the master process to ping"); - select(0, NULL, NULL, NULL, &tv); + + zlog(ZLOG_DEBUG, "The calling process is waiting for the master process to ping via fd=%d", fpm_globals.send_config_pipe[0]); + ret = select(fpm_globals.send_config_pipe[0] + 1, &rfds, NULL, NULL, &tv); + if (ret == -1) { + zlog(ZLOG_SYSERROR, "failed to select"); + exit(FPM_EXIT_SOFTWARE); + } + if (ret) { /* data available */ + int readval; + ret = read(fpm_globals.send_config_pipe[0], &readval, sizeof(readval)); + if (ret == -1) { + zlog(ZLOG_SYSERROR, "failed to read from pipe"); + exit(FPM_EXIT_SOFTWARE); + } + + if (ret == 0) { + zlog(ZLOG_ERROR, "no data have been read from pipe"); + exit(FPM_EXIT_SOFTWARE); + } else { + if (readval == 1) { + zlog(ZLOG_DEBUG, "I received a valid acknoledge from the master process, I can exit without error"); + fpm_cleanups_run(FPM_CLEANUP_PARENT_EXIT); + exit(FPM_EXIT_OK); + } else { + zlog(ZLOG_DEBUG, "The master process returned an error !"); + exit(FPM_EXIT_SOFTWARE); + } + } + } else { /* no date sent ! */ + zlog(ZLOG_ERROR, "the master process didn't send back its status (via the pipe to the calling process)"); + exit(FPM_EXIT_SOFTWARE); + } exit(FPM_EXIT_SOFTWARE); } } @@ -337,7 +350,7 @@ int fpm_unix_init_main() /* {{{ */ return -1; } } else { - zlog(ZLOG_WARNING, "'process.priority' directive is ignored when FPM is not running as root"); + zlog(ZLOG_NOTICE, "'process.priority' directive is ignored when FPM is not running as root"); } } diff --git a/sapi/fpm/init.d.php-fpm.in b/sapi/fpm/init.d.php-fpm.in index dc66310c3d..49cce79ae9 100644 --- a/sapi/fpm/init.d.php-fpm.in +++ b/sapi/fpm/init.d.php-fpm.in @@ -18,7 +18,7 @@ php_fpm_CONF=@sysconfdir@/php-fpm.conf php_fpm_PID=@localstatedir@/run/php-fpm.pid -php_opts="--fpm-config $php_fpm_CONF" +php_opts="--fpm-config $php_fpm_CONF --pid $php_fpm_PID" wait_for_pid () { @@ -54,7 +54,7 @@ case "$1" in start) echo -n "Starting php-fpm " - $php_fpm_BIN $php_opts + $php_fpm_BIN --daemonize $php_opts if [ "$?" != 0 ] ; then echo " failed" diff --git a/sapi/fpm/php-fpm.8.in b/sapi/fpm/php-fpm.8.in index 6c9c6d6274..a4e7e74e20 100644 --- a/sapi/fpm/php-fpm.8.in +++ b/sapi/fpm/php-fpm.8.in @@ -99,6 +99,20 @@ Test FPM configuration file and exit If called twice (-tt), the configuration is dumped before exiting. .TP .PD 0 +.B \-\-daemonize +.TP +.PD 1 +.B \-D +Force to run in background and ignore daemonize option from configuration file. +.TP +.PD 0 +.B \-\-nodaemonize +.TP +.PD 1 +.B \-F +Force to stay in foreground and ignore daemonize option from configuration file. +.TP +.PD 0 .B \-\-zend\-extension \fIfile\fP .TP .PD 1 @@ -113,13 +127,20 @@ The configuration file for the php-fpm daemon. .B php.ini The standard php configuration file. .SH EXAMPLES -You should use the init script provided to start and stop the php-fpm daemon. This situation applies for any unix systems which use init.d for their main process manager. +For any unix systems which use init.d for their main process manager, you should use the init script provided to start and stop the php-fpm daemon. .P .PD 1 .RS sudo /etc/init.d/php-fpm start .RE .TP +For any unix systems which use systemd for their main process manager, you should use the unit file provided to start and stop the php-fpm daemon. +.P +.PD 1 +.RS +sudo systemctl start php-fpm.service +.RE +.TP If your installation has no appropriate init script, launch php-fpm with no arguments. It will launch as a daemon (background process) by default. The file @php_fpm_localstatedir@/run/php-fpm.pid determines whether php-fpm is already up and running. Once started, php-fpm then responds to several POSIX signals: .P .PD 0 diff --git a/sapi/fpm/php-fpm.service.in b/sapi/fpm/php-fpm.service.in new file mode 100644 index 0000000000..396a88d66f --- /dev/null +++ b/sapi/fpm/php-fpm.service.in @@ -0,0 +1,12 @@ +[Unit] +Description=The PHP FastCGI Process Manager +After=syslog.target network.target + +[Service] +PIDFile=@localstatedir@/run/php-fpm.pid +ExecStart=@sbindir@/php-fpm --nodaemonize --fpm-config @sysconfdir@/php-fpm.conf +ExecReload=/bin/kill -USR2 $MAINPID + +[Install] +WantedBy=multi-user.target + |